我有一个带有 SQL 数据库的现有应用程序,该数据库已使用数据库优先模型进行编码(每次我有架构更改时都会创建一个 EDMX 文件)。
已经完成了一些额外的开发(支持原始应用程序的 Windows 服务),它使用 EF POCO/DbContext 作为数据层而不是 EF EDMX 文件。没有在 DbContexts 中配置初始化设置,但它们从未修改数据库,因为 DbSet 对象始终与表匹配。
现在,我编写了一个单独的应用程序,它使用现有数据库但只使用它自己的新表,它使用 EF 初始化程序自行创建。我曾认为这是使用 EF Code First 来管理这些新表的好时机。我第一次运行应用程序时一切正常,但现在我从我的一些原始 EF POCO DbContexts(从未使用过初始化程序)中得到了这个错误。
自创建数据库以来,支持“ServerContext”上下文的模型已更改。考虑使用 Code First 迁移来更新数据库
经过一番调查,我发现 EF 将其架构的哈希与某处 sql 服务器中存储的一些哈希进行比较。在上下文实际使用数据库上的初始化程序之前,该值不存在(在我的情况下,直到最近的应用程序添加了它的表)。
现在,我的其他 DbContexts 在读取现在存在的哈希值时抛出错误,并且它与自己的不匹配。使用 EDMX 的 EF 连接没有任何错误。
似乎解决方案是将这条线放在protected override void OnModelCreating(DbModelBuilder modelBuilder)
所有遇到问题的 DbContexts 中
Database.SetInitializer<NameOfThisContext>(null);
但是,如果稍后我想编写另一个应用程序并让它首先使用 EF 代码再次创建自己的表,那么现在我将永远无法协调这个理论上甚至更新的上下文和现在导致问题的上下文之间的哈希值.
有没有办法清除 EF 存储在数据库中的哈希?EF 是否足够智能以仅更改在当前上下文中作为 DbSet 存在的表?任何见解表示赞赏。