【发布时间】:2013-03-29 17:57:00
【问题描述】:
是否可以在 Entity Framework 5 Code First 迁移中进行任何类型的编程数据转换?
有一个执行查询的 Sql() 方法,但它的返回类型为 void,我看不到任何方法可以获取我执行的查询的结果。
示例
我的表 Recipe 与 Ingredient 具有一对多的关系。由于各种原因,我想将其转换为成分 JSON 字符串属性。我能想到的唯一方法是这样的:
- 创建新列IngredientsJson
- 对于每个配方,查询其成分,以编程方式构造 JSON 字符串并插入到新列中。
- 删除旧表成分。
【问题讨论】:
-
我想我会在 Seed 方法中进行转换,只在新代码中使用新列(s/tables,...),并将旧数据库对象的删除留到下一次迁移.我在升级中混合 DML 和 DDl 的经历很糟糕。除此之外,在新版本中提供旧数据(尽管不可见)是一种安全的感觉,因为转换可能总是会引入意外的错误甚至数据丢失。还有一个问题:为什么要获取查询结果?
-
这个想法是获取 Sql() 命令的结果,我在其中查询配方的成分,以便以编程方式将其转换为 JSON 成分数组。谢谢你的建议。我在您的方法中看到的一个问题是,在迁移到删除成分表的步骤之前,我需要确保在所有数据库上至少运行了一次 Seed()。我只是认为这是很容易忘记的事情,因此我希望将数据转换作为迁移步骤的一部分。它只是更有意义,在我的脑海中似乎更强大。
-
是的,我可以看到。我宁愿安全也不愿后悔,JIRA 是我的记忆。也许其他人对您的场景有经验。这个有趣的问题还有更多方面。不知道你是否也应该在 Down 方法中提供反向转换?
-
是的,我相信提供向后数据转换也是一个好主意。我确实喜欢尽可能保持无损迁移链的想法。我不确定是否有不可能的情况?
标签: entity-framework entity-framework-5 database-migration entity-framework-migrations