EF DBConfiguration自动关联到不带注释的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。有什么想法吗?

在web.config中的"是"one_answers"否"应该有一个类似的部分

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

其中DAL将是您的MyContextMyConfiguration存在的

[EDIT]

要仅在代码中执行此操作,必须使用静态方法DbConfiguration.SetConfiguration(DbConfiguration configuration)根据此处,并且必须在使用上下文之前进行设置。

最新更新