8

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

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

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

4

2 回答 2

0

与其尝试将名称拆分为两个不同的字段,不如重新考虑您的迁移。有时它可能是最好的上演。我可以想到两种方法来执行您的转换。

迁移路径 #1:新字段,然后删除旧字段

  1. 为 FirstName 和 LastName 的新字段创建迁移,在 Up() 方法中,您仍然有 Name 字段,将其拆分,插入 First 和 Last 字段。
  2. 创建另一个迁移以删除旧的名称字段。

迁移路径 #2:重新调整用途和重命名

  1. 创建一个添加 LastName 字段的迁移,并将 Name 重命名为 FirstName,移动姓氏数据,修改重命名的 First/Name 字段以仅保存名字。

两种路径都有优点和缺点。无论您的转换有多复杂,您都应该能够将其分解为逻辑阶段以实现目标。

于 2014-12-10T18:53:19.353 回答
0

不,您不能使用DbContextinsideUp方法,因为它已经引用了新模型,但您的数据库仍以旧模型为目标。

编辑:

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

于 2012-09-26T08:32:47.620 回答