2014-09-22 73 views
1

使用引入Compact 4.0的最新EF(6.1.1)和EF for SQL Server Compact(6.1.1)。 Target is Net 4.5.1EF DBConfiguration自动关联到DBContext而不带注释

想要编码我的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。有任何想法吗?

回答

2

是和否在你的web.config,你应该有这样的

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

一个栏目,DAL会在您MyContextMyConfiguration存在

[编辑]

到仅在代码中执行此操作时,必须使用按照here的静态方法DbConfiguration.SetConfiguration(DbConfiguration configuration) 且必须使用b在使用上下文之前设置。

+0

建立一个代码结构,想避免配置文件(如web.config),以便StructureMap可以做我的作文。 – 2014-09-22 12:50:11

+0

@MatthewYoung我更新了答案。 – 2014-09-22 13:10:54

+0

接受了答案。曾见过那个静态的电话。但是如果我们有多个DBContexts会喜欢不同的DBConfiguration对象呢?无法完成? – 2014-09-22 13:21:17