我应该如何编写一个转换数据的实体框架迁移(最好使用DbContext)?

Set*_*eth 8 entity-framework ef-code-first ef-migrations

假设我的对象有一个Name字段,我希望将其拆分为FirstName和LastName字段.或者它可能有一个地址字符串,我正在添加需要地理编码的Lat和Lng字段.等等

我期望在Up()和Down()方法中访问我的DbContext,但我能找到的(除了内置函数)是.Sql()调用.这足以添加和删除列,但不能将现有数据转换为新格式.

在Up()调用中引用我的DbContext是否安全?或者是否有另一种推荐的实现迁移模式,需要的不仅仅是简单的SQL?

Lad*_*nka 0

不,您不能使用DbContext内部Up方法,因为它已经引用了新模型,但您的数据库仍然针对旧模型。

编辑:

所有数据迁移都必须通过Sql. 例如,您可以创建临时表、将旧数据移动到临时表、使用表结构迁移以及直接在 SQL 中使用某种转换将数据从临时表移回原始表 - 拆分 varchar 值应该不是什么大问题。

  • 我所需的转换不能作为 SQL 完成(拆分 varchar 是一个极其简单的示例)。这种迁移操作在像 ActiveRecord 这样的鸭子型 ORM 中是非常自然的,但这是 EF 方法遇到麻烦的一个领域,这是有道理的。 (2认同)