我有一个现有的数据库。为了摆脱现有数据库发生的“自创建数据库以来上下文已更改”异常,我在 Global.asax.cs 的 Application_Start() 中调用以下内容,如我所读内容中所建议的那样:
Database.SetInitializer<SomeEntities>( null );
问题是我需要为每个存在一些问题的现有实体向 Application_Start 添加一行:-
- 如果我为现有表添加一个新实体,那么我需要记住在 Application_Start() 中调用它。问题是 Application_Start 已从我添加的类中删除,所以我倾向于忘记这一点,这意味着我一直遇到异常。
- 实体上的操作已从它所作用的实体代码中删除,因此通过查看初始化程序为空的实体类并不明显。这是我一直忘记的原因之一——因为我在现有的课程中看不到它。同样,如果我删除一个实体并从我的解决方案中删除该类,我需要记住去挖掘 Application_Start。
- 启动代码中混杂着 Database.SetIntializer() 调用。
理想情况下,我想在 Entities 类(从 DBContext 派生)的构造函数中调用它。我尝试了以下但没有奏效:
Database.SetInitializer(false);
所以,我的问题是,在 Entities 类(即从 DBContext 派生的类)中而不是在 Application_Start 中设置初始化程序的最佳方法是什么。也许是实体类中调用 Database.SetInitializer 的静态构造函数?
如果构造函数中的 Database.SetInitializer(false) 是正确的方法,那么我会坚持下去,看看我哪里出错了。