假设我的对象有一个 Name 字段,我希望将其拆分为 FirstName 和 LastName 字段。或者它有一个地址字符串,我正在添加需要地理编码的 Lat 和 Lng 字段。等等等等。
我希望能够在 Up() 和 Down() 方法中访问我的 DbContext,但我所能找到的(除了内置函数)是 .Sql() 调用。这足以添加和删除列,但不足以将现有数据转换为新格式。
在 Up() 调用中引用我的 DbContext 是否安全?或者是否有另一种推荐的模式来实现需要更多 SQL 的迁移?
假设我的对象有一个 Name 字段,我希望将其拆分为 FirstName 和 LastName 字段。或者它有一个地址字符串,我正在添加需要地理编码的 Lat 和 Lng 字段。等等等等。
我希望能够在 Up() 和 Down() 方法中访问我的 DbContext,但我所能找到的(除了内置函数)是 .Sql() 调用。这足以添加和删除列,但不足以将现有数据转换为新格式。
在 Up() 调用中引用我的 DbContext 是否安全?或者是否有另一种推荐的模式来实现需要更多 SQL 的迁移?
与其尝试将名称拆分为两个不同的字段,不如重新考虑您的迁移。有时它可能是最好的上演。我可以想到两种方法来执行您的转换。
迁移路径 #1:新字段,然后删除旧字段
迁移路径 #2:重新调整用途和重命名
两种路径都有优点和缺点。无论您的转换有多复杂,您都应该能够将其分解为逻辑阶段以实现目标。
不,您不能使用DbContext
insideUp
方法,因为它已经引用了新模型,但您的数据库仍以旧模型为目标。
编辑:
所有数据迁移都必须通过Sql
. 例如,您可以创建临时表,将旧数据移动到临时表,使用表结构迁移并将数据从临时表移回原始表,直接在 SQL 中使用一些转换 - 拆分 varchar 值应该不是什么大问题。