实体框架与现有数据库最整洁的方法
本文关键字:方法 数据库 框架 实体 | 更新日期: 2023-09-27 18:29:17
我有一个现有的数据库。为了消除现有数据库中出现的"自创建数据库以来上下文已更改"异常,我在Global.asax.cs的Application_Start()中调用了以下内容,这在我阅读的内容中是推荐的:
Database.SetInitializer<SomeEntities>( null );
问题是,我需要为每个存在一些问题的现有实体在Application_Start中添加一行:-
- 如果我为现有表添加了一个新的实体,那么我需要记住在Application_Start()中调用它。问题是Application_Start从我添加的类中删除了,所以我倾向于忘记这一点,这意味着我一直在处理异常
- 对Entity的操作是从它正在执行的实体代码中删除的,因此通过查看Entity类,初始值设定项为null并不明显。这也是我一直忘记的原因之一,因为我在现有的课程中看不到它。类似地,如果我从解决方案中删除一个实体并删除该类,我需要记住在Application_Start中进行挖掘
- 启动代码中充斥着Database.SetIntializer()调用
理想情况下,我希望在Entities类的构造函数(从DBContext派生)中调用它。我尝试了以下操作,但没有成功:
Database.SetInitializer(false);
因此,我的问题是,在Entities类(即从DBContext派生的类)中而不是在Application_Start中设置初始值设定项的最佳方法是什么。可能是Entities类中调用Database.SetInitializer的静态构造函数?
如果构造函数中的Database.SetInitializer(false)是正确的方法,那么我会坚持使用它,看看哪里出了问题。
您放入Global.asax.cs
的代码可以放入Context
的静态构造函数中。
public class MyContext : DbContext
{
static MyContext ()
{
Database.SetInitializer<MyContext>(null);
}
//...
}
此处、此处和此处的参考