使用最新的EF(6.1.1)和EF for SQL Server Compact(6.1.1),它们引入了Compact 4.0。目标是净4.5.1
希望对我的EF进行编码,然后将其与StructureMap一起拼凑起来。创建了一个DbConfiguration类:
public class MyConfiguration : DbConfiguration
{
SetDatabaseInitializer<MyContext>(new MyInitializer());
SetProviderServices(SqlCeProviderServices.ProviderInvariantName,
SqlCeProviderServices.Instance);
}
上下文:
public class MyContext : DbContext
{
public MyContext(String connection) : base(connection) {}
....
}
使用XUnit我运行:
using (var ctx = new MyContext(String.Format("Data Source={0}", Path.Combine(databasePath, databaseName)))) {
ctx.Database.Initialize(true)
}
测试用例成功创建了我的Compact数据库(和初始化程序的种子)。但是幕后发生了许多隐含的事情,我不知道。
例如,我不需要在MyContext类上使用以下注释:
[DbConfigurationType(typeof(MyConfiguration))]
EF必须足够聪明才能看到我有一个扩展DbConnection并使用它的MyConfiguration类。要么?我也可以一起删除MyConfiguration,测试用例仍然会生成一个数据库(显然没有播种)。怎么样?
我希望能够使用代码将DbConfiguration分配给特定的DbContext,而无需通过静态:
static MyContext()
{
DbConfiguration.set(new MyConfiguration());
}
原因是对于StructureMap的不同“配置文件”。有任何想法吗?
答案 0 :(得分:3)
是和否,你应该有这样的部分
<contexts>
<context type="<DAL.MyContext, DAL">
<databaseInitializer type="DAL.MyConfiguration, DAL" />
</context>
</contexts>
DAL
位于MyContext
和MyConfiguration
存在的位置
<强> [编辑] 强>
只在代码中执行它必须使用静态方法DbConfiguration.SetConfiguration(DbConfiguration configuration)
根据{{3}},必须在使用上下文之前设置它。