我正在使用仅包含代码的 Ado.Net 实体框架(教程位于:ADO.NET 团队博客)并且我希望尽可能独立于数据库。
在我的第一种方法中,我只想使用 Sql Express 和 Sql Compact 数据库。 使用 Sql Express 一切正常,但是使用 Sql Compact 我得到了我的问题中提到的异常。
有人知道是否可以使用仅代码方法连接到 Sql Compact 吗? (为 Sql Compact 数据库生成的 .edmx 文件一切正常,但我只想使用代码!)
这里是一些代码:
正在构建 DataContext 的我的班级:
public class DataContextBuilder : IDataContextBuilder
{
private readonly DbProviderFactory _factory;
public DataContextBuilder(DbProviderFactory factory)
{
_factory = factory;
}
#region Implementation of IDataContextBuilder
public IDataContext CreateDataContext(string connectionString)
{
var builder = new ContextBuilder<DataContext>();
RegisterConfiguration(builder);
var connection = _factory.CreateConnection();
connection.ConnectionString = connectionString;
var ctx = builder.Create(connection);
return ctx;
}
#endregion
private void RegisterConfiguration(ContextBuilder<DataContext> builder)
{
builder.Configurations.Add(new PersonConfiguration());
}
}
线路
var ctx = builder.Create(connection);
正在抛出异常。
IDataContext 只是 ObjectContext 的一个简单接口:
public interface IDataContext
{
int SaveChanges();
IObjectSet<Person> PersonSet { get; }
}
我的连接字符串是在app.config中配置的:
<connectionStrings>
<add name="CompactConnection" connectionString="|DataDirectory|\Test.sdf"
providerName="System.Data.SqlServerCe.3.5" />
</connectionStrings>
构建动作开始于
var cn = ConfigurationManager.ConnectionStrings["CompactConnection"];
var factory = DbProviderFactories.GetFactory(cn.ProviderName);
var builder = new DataContextBuilder(factory);
var context = builder.CreateDataContext(cn.ConnectionString);