3

我正在使用 EF 4.3.1,并且我有 100 多个驱动 1 个基本上下文的上下文。对于所有上下文,我想禁用数据库初始化。

是否可以为实体框架设置默认行为?

提前致谢

4

3 回答 3

2

Database.SetInitializer<TContext>是你所追求的。将 null 传递给此方法也应该禁用初始化。

http://msdn.microsoft.com/en-us/library/gg679461(v=vs.103).aspx

于 2012-05-02T12:02:21.813 回答
2

您可以更改 * .config文件以禁用数据库初始化。这是根据上下文完成的,但也许它适用于您的基本上下文。

<contexts>
  <context type=" Blogging.BlogContext, MyAssembly" disableDatabaseInitialization="true" />
</contexts>

EF 4.3 配置文件设置中给出了更好的解释

于 2012-08-14T19:47:40.360 回答
2
//Gather all the DbContexts types in the assembly
var allDbContextsTypes = Assembly.GetExecutingAssembly().GetTypes().Where(t => t.BaseType == (typeof(DbContext))).ToList();

foreach (Type dbContextType in allDbContextsTypes)
{
    //Get the SetInitializerMethod
    MethodInfo initializerMethod = typeof(Database).GetMethod("SetInitializer");

    //Make it generic! (Oh yeah)
    MethodInfo dbContextInitializerMethod = initializerMethod.MakeGenericMethod(dbContextType);

    //Invoke the method with null initializer
    dbContextInitializerMethod.Invoke(null, new object[]{null});
}

最后,它给出了类似的内容:Database.SetInitializer<YourDbContext>(null); 其中 YourDbContext 是循环中的当前 dbContext 类型

于 2014-04-19T00:32:28.603 回答