我第一次在生产环境中使用 Entity Framework 代码。一切都很顺利,直到我们启动数据库并将一些数据放入其中,然后为了获取我们从另一个位置导入的一些数据,我们不得不更改字段长度。所以我们将一些字段设为 nvarchar(99) 而不是 nvarchar(50)。
一切顺利,应用程序仍然有效,但我知道我需要更改数据注释,否则它会在稍后加载并尝试保存太长的字段时崩溃。当我这样做时,即使模型和数据库现在匹配,应用程序也会崩溃。所以我认为这是元数据表中的散列,所以我想我会聪明地制作一个新的数据库并从那里获取散列并复制它。那没有用,实际上现在我无法让我的应用程序连接到我们加载了数据的测试数据库。
我不想删除并重新创建此数据库。我希望 Entity Framework 能够意识到模型和模式实际上是匹配的。我有什么办法可以做到这一点吗?另外,为什么从使用此模型创建的 Entity Framework 创建的数据库中复制元数据不起作用?
最佳答案
Entity Framework Code First 创建一个 EdmMetadata
表并在其中保存模型类的哈希值。当您更改模型中的某些内容时,新模型类的哈希值不再与 EdmMetadata
表中的内容匹配,应用程序应该在运行时“崩溃”。要继续使用同一个数据库而不删除它,您需要做的是删除 EdmMetadata
表。这样 EF 就不会进行该检查,而是会尝试继续访问数据库。
检查这个video tutorial (跳至“何时更改类(class)”部分的 8:10)。
关于c# - 如何让 Entity Framework 实现模型和数据库同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5971776/