我正在使用EF 4.3.1,我有100多个上下文,它们驱动了1个基本上下文。对于所有上下文,我想禁用数据库初始化。
是否可以为Entity Framework设置默认行为?
提前致谢
答案 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>
给出了更好的解释
答案 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类型