0

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

Database.SetInitializer<SomeEntities>( null );

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

  1. 如果我为现有表添加一个新实体,那么我需要记住在 Application_Start() 中调用它。问题是 Application_Start 已从我添加的类中删除,所以我倾向于忘记这一点,这意味着我一直遇到异常。
  2. 实体上的操作已从它所作用的实体代码中删除,因此通过查看初始化程序为空的实体类并不明显。这是我一直忘记的原因之一——因为我在现有的课程中看不到它。同样,如果我删除一个实体并从我的解决方案中删除该类,我需要记住去挖掘 Application_Start。
  3. 启动代码中混杂着 Database.SetIntializer() 调用。

理想情况下,我想在 Entities 类(从 DBContext 派生)的构造函数中调用它。我尝试了以下但没有奏效:

Database.SetInitializer(false);

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

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

4

1 回答 1

1

您放入的代码Global.asax.cs可以放入Context.

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

    //...
}

参考这里这里这里

于 2013-08-27T09:33:23.037 回答