EF DBConfiguration自动关联到没有注释的DBContext

时间:2014-09-22 09:20:20

标签: c# entity-framework dbcontext

使用最新的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的不同“配置文件”。有任何想法吗?

1 个答案:

答案 0 :(得分:3)

你的web.config中的

是和否,你应该有这样的部分

<contexts>
  <context type="<DAL.MyContext, DAL">
    <databaseInitializer type="DAL.MyConfiguration, DAL" />
  </context>
</contexts>

DAL位于MyContextMyConfiguration存在的位置

<强> [编辑]

只在代码中执行它必须使用静态方法DbConfiguration.SetConfiguration(DbConfiguration configuration) 根据{{​​3}},必须在使用上下文之前设置它。