从DBMigration Up()内部调用实体框架模型

本文关键字:调用 实体 框架 模型 内部 DBMigration Up | 更新日期: 2023-09-27 18:24:26

我们首先使用实体框架代码。我们的一个旧数据库需要应用多次迁移,但在(比如)7个数据库中的3个数据库上,迁移失败

错误:自创建数据库以来,支持"MyContext"上下文的模型已更改

同样的迁移对我们的其他数据库也很有效,但这些dbs会随着迁移的进行而更新,即一次一个迁移。

用于该迁移的DBMigration Up()方法使用我们的一些EF模型类来进行一些数据更改,所以我认为问题是我们的模型的代码希望迁移7在那里。

除了将所有EF调用从Up()/Down()移到Seed()方法(这将失去适用于迁移的链接)之外,还有什么策略可以避免这种影响吗?

从DBMigration Up()内部调用实体框架模型

当为您构建迁移时,它没有针对您的模型的调用,这是故意的。如果您在早期迁移中在Up()中使用了自己的模型,然后决定不再需要这些模型,那么迁移就会失败。

您认为Seed方法是专门为处理添加相关数据(如通用查找等)而构建的,这是正确的。如果要一起删除查找表,只需删除不再需要的种子逻辑即可。

基本上,迁移不应该直接与任何EF模型挂钩,这是一种有意的分离。

为我自己的问题添加一个同事建议的替代答案;在Up/Down方法中使用ADO.net调用而不是EF调用。这使得数据可以随着迁移而向上或向下更改,而不是种子方法(它并不真正知道数据是在迁移时向上还是向下更改)。

尽管如此,我认为Runesun更好地回答了这个问题的"为什么",所以标记为正确。