Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EF DBConfiguration自动关联到DBContext,无需注释_C#_Entity Framework_Dbcontext - Fatal编程技术网

C# EF DBConfiguration自动关联到DBContext,无需注释

C# EF DBConfiguration自动关联到DBContext,无需注释,c#,entity-framework,dbcontext,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()); Se

使用最新的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);
 }
使用XUnit,我运行:

 using (var ctx = new MyContext(String.Format("Data Source={0}", Path.Combine(databasePath, databaseName)))) {
   ctx.Database.Initialize(true)
 }
测试用例成功地创建(并通过初始值设定项进行种子设定)my Compact数据库。但是在幕后发生了很多我不明白的事情

例如,我不需要在MyContext类上有以下注释:

 [DbConfigurationType(typeof(MyConfiguration))]
EF必须足够聪明,可以看到我有一个扩展DbConnection并使用它的MyConfiguration类。或我还可以一起删除MyConfiguration,测试用例仍然会生成一个数据库(显然没有种子)。怎么做

我希望能够使用代码将DbConfiguration分配给特定的DbContext,而无需经历静态:

 static MyContext()
 {
   DbConfiguration.set(new MyConfiguration());
 }

原因是,还需要使用StructureMap为不同的“配置文件”。有什么想法吗

在web.config中选择“是”和“否”应该有这样一个部分

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

其中
DAL
就是您的
MyContext
MyConfiguration
存在的地方

[编辑]

要仅在代码中执行此操作,必须使用静态方法
DbConfiguration.SetConfiguration(DbConfiguration配置)

根据,必须在使用上下文之前设置它。

使用代码构建结构,希望避免配置文件(如web.config),以便StructureMap可以完成我的合成。接受答案。我看到了那个静态呼叫。但是如果我们有多个DBContext需要不同的DBConfiguration对象,会发生什么情况呢?“做不到吗?”MatthewYoung说,这种方法是单一的,我想你不能有更多的,但这比我以前做的更多,我不知道。但是在web.config中你可以有多个,所以这一定是可能的,我只是不知道怎么做。
<contexts>
  <context type="<DAL.MyContext, DAL">
    <databaseInitializer type="DAL.MyConfiguration, DAL" />
  </context>
</contexts>