实体框架与现有数据库 - 最新的方法?

时间:2013-08-27 03:18:15

标签: c# asp.net-mvc entity-framework

我有一个现有的数据库。自从创建数据库以来,摆脱“上下文”已经发生了变化。在现有数据库中发生的异常,我在Global.asax.cs的Application_Start()中调用以下内容,如我所读到的那样:

Database.SetInitializer<SomeEntities>( null );

问题是我需要为每个有一些问题的现有实体添加一行到Application_Start: -

  1. 如果我为现有表添加新权限,那么我需要记住在Application_Start()中调用它。问题是Application_Start已从我添加的类中删除,所以我倾向于忘记这一点,这意味着我一直在遇到异常。
  2. 对实体的操作将从它所处理的实体代码中删除,因此通过查看Entity类初始化器为null是不明显的。这是我一直忘记的原因之一 - 因为我在现有课程中没有看到它。同样,如果我删除一个实体并从我的解决方案中删除该类,我需要记住要在Application_Start中进行挖掘。
  3. 启动代码混乱了Database.SetIntializer()调用。
  4. 理想情况下,我想在Entities类的构造函数中调用它(从DBContext派生)。我尝试了以下但是没有用:

    Database.SetInitializer(false);
    

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

    如果构造函数中的Database.SetInitializer(false)是正确的方法,那么我会坚持下去,看看我哪里出错了。

1 个答案:

答案 0 :(得分:1)

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

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

    //...
}

引用hereherehere