2013-08-27 57 views
0

我有一个现有的数据库。为了摆脱的“语境已经改变,因为数据库创建”与现有数据库发生异常,我称之为Global.asax.cs中的的Application_Start()以下的建议在我读:实体框架与现有数据库 - 最新方法?

Database.SetInitializer<SomeEntities>(null); 

的问题是,我需要添加一行的Application_Start对于具有一些问题,每个现有的实体: -

  1. 如果我添加一个新entitity现有表,然后我需要记住在Application_Start()中调用它。问题是Application_Start从我添加的类中删除,所以我倾向于忘记这个,这意味着我继续触发异常。
  2. 实体上的操作从它正在处理的实体代码中移除,因此通过查看初始化程序为空的实体类并不明显。这是我一直遗忘的原因之一 - 因为我没有在我现有的课程中看到它。同样,如果我删除一个实体并从我的解决方案中删除该类,我需要记住要在Application_Start中进行挖掘。
  3. 启动代码与Database.SetIntializer()调用混杂在一起。

理想情况下,我想在实体类(从DBContext派生)的构造函数中调用此函数。我尝试以下,但它没有工作:

Database.SetInitializer(false); 

所以,我的问题是,什么是设置实体类(即从的DbContext派生类)中的初始化,而不是在的Application_Start的最佳途径。也许是调用Database.SetInitializer的Entities类中的静态构造函数?

如果Database.SetInitializer(假)在构造函数是正确的做法,然后我将与它坚持下去,看看我错了。

回答

1

您放入Global.asax.cs的代码可以被放入了Context静态构造函数。

public class MyContext : DbContext 
{ 
    static MyContext() 
    { 
     Database.SetInitializer<MyContext>(null); 
    } 

    //... 
} 

参考hereherehere

+0

感谢,静态构造函数是什么,我会去用,但不知何故,我错过了,表明这是最好的方式的引用。 – acarlon