我正在使用Ado.Net实体框架和仅代码(教程:ADO.NET team blog),我想尽可能多地保持数据库独立。
在我的第一种方法中,我只想使用Sql Express和Sql Compact数据库。 使用Sql Express everthing工作正常但使用Sql Compact我得到了我的问题中提到的异常。
有人知道是否可以使用Code Only方法连接到Sql Compact? (生成的.edmx文件用于Sql Compact数据库everthing工作正常,但我只想使用代码!)
以下是一些代码:
构建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);