实体框架与现有数据库最整洁的方法

本文关键字:方法 数据库 框架 实体 | 更新日期: 2023-09-27 18:29:17

我有一个现有的数据库。为了消除现有数据库中出现的"自创建数据库以来上下文已更改"异常,我在Global.asax.cs的Application_Start()中调用了以下内容,这在我阅读的内容中是推荐的:

Database.SetInitializer<SomeEntities>( null );

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

  1. 如果我为现有表添加了一个新的实体,那么我需要记住在Application_Start()中调用它。问题是Application_Start从我添加的类中删除了,所以我倾向于忘记这一点,这意味着我一直在处理异常
  2. 对Entity的操作是从它正在执行的实体代码中删除的,因此通过查看Entity类,初始值设定项为null并不明显。这也是我一直忘记的原因之一,因为我在现有的课程中看不到它。类似地,如果我从解决方案中删除一个实体并删除该类,我需要记住在Application_Start中进行挖掘
  3. 启动代码中充斥着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);
    }
    //...
}

此处、此处和此处的参考