禁用Entity Framework 4.3的数据库初始化

时间:2012-05-02 11:59:38

标签: c# entity-framework-4

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

是否可以为Entity Framework设置默认行为?

提前致谢

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

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

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

EF 4.3 Configuration File Settings

给出了更好的解释

答案 2 :(得分: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); 您的DbContext是循环中当前的dbContext类型