如何获取实体框架以实现模型和数据库同步
本文关键字:实现 模型 同步 数据库 框架 实体 何获取 获取 | 更新日期: 2023-09-27 17:56:24
我第一次在生产环境中使用实体框架代码。一切都很顺利,直到我们启动数据库并将一些数据放入其中,然后为了获取我们从另一个位置导入的一些数据,我们必须更改字段长度。所以我们做了一些字段 nvarchar(99) 而不是 nvarchar(50)。
这很顺利,应用程序仍然可以工作,但我知道我需要更改数据注释,否则稍后加载并尝试保存太长的字段时它会爆炸。当我这样做时,即使模型和数据库现在匹配,应用程序也爆炸了。所以我认为这是元数据表中的哈希值,所以我认为我会很聪明地创建一个新数据库并从那里获取哈希值并复制它。这不起作用,实际上现在我无法让我的应用程序连接到我们加载数据的测试数据库。
我不想删除并重新创建此数据库。我希望实体框架意识到模型和架构实际上是匹配的。我有什么办法可以做到这一点吗?另外,为什么从使用此模型创建的实体框架的数据库中复制元数据不起作用?
实体框架代码首先创建一个EdmMetadata
表,并在其中保存模型类的哈希。当您更改模型中的某些内容时,新模型类的哈希不再与EdmMetadata
表中的内容匹配,并且应用应该在运行时"爆炸"。要继续使用同一数据库而不删除它,您需要做的是删除EdmMetadata
表。这样,EF 将不会执行该检查,而是尝试继续访问数据库。
查看此视频教程(跳到"当类更改时"部分的 8:10)。
我修复了这个问题。删除元数据有效。但事实证明,我在尝试解决我的问题时意外地更新到最新版本的 EntityFramework,并且这个较新版本期望数据库有不同的命名约定。在任何情况下,使用实体框架创建的数据库中的脚本重新创建多对多组人员表并删除元数据都可以解决此问题。