如何让实体框架实现模型与DB同步

Set*_*son 5 c# entity entity-framework code-first

我第一次在生产环境中使用实体框架代码。一切都很顺利,直到我们建立了数据库并将一些数据放入其中,然后为了获取我们从另一个位置导入的一些数据,我们不得不更改字段长度。所以我们制作了一些字段 nvarchar(99) 而不是 nvarchar(50)。

一切顺利,应用程序仍然可以工作,但我知道我需要更改数据注释,否则在加载并尝试保存太长的字段时它会在稍后爆炸。当我这样做时,即使模型和数据库现在匹配,应用程序也会爆炸。所以我认为它是元数据表中的散列,所以我想我会很聪明并创建一个新的数据库并从那里获取散列并复制它。那不起作用,事实上现在我无法让我的应用程序连接到我们加载了数据的测试数据库。

我不想删除并重新创建这个数据库。我希望实体框架意识到模型和模式确实匹配。我有什么办法可以做到这一点吗?另外,为什么从实体框架使用此模型创建的数据库复制元数据不起作用?

Far*_*nha 2

Entity Framework Code First 创建一个EdmMetadata表并在其中保存模型类的哈希值。当您更改模型中的某些内容时,新模型类的哈希值不再与表中的内容匹配EdmMetadata,并且应用程序应该在运行时“爆炸”。要继续使用同一数据库而不删除它,您需要做的是删除该EdmMetadata表。这样 EF 将不会执行该检查,而是会尝试继续访问数据库。

查看此视频教程(跳至“当班级发生变化时”部分的 8:10)。