【发布时间】:2012-08-26 18:09:00
【问题描述】:
我首先使用实体框架代码,我想生成 C# 代码,用于从数据库中已存在的数据中播种数据。现在,填充 DropCreateDatabaseIfModelChanges.Seed() 似乎是一个完全手动的过程,开发人员在其中创建对象并填写值。如果开发人员是唯一负责播种数据的人,这在某种程度上是可以管理的,但我想通常情况并非如此。
在我的特殊情况下,有一些非开发人员通过使用一些 MVCScaffolding 生成的输入表单来帮助填充数据库。他们添加的数据确实属于“种子数据”类别,因此我想将他们新添加的行包含在我的 Seed() 实现中。可以简单地将其解释为“生成 C# 代码插入脚本”函数。
谢谢!
【问题讨论】:
-
您是否考虑过让 Sql Server 从您的所有表中提取数据生成脚本,并在您需要播种新数据库时运行该 SQL 脚本?您也可以自动执行此操作,在单元测试中从 C# 或您需要的任何内容中运行它。不像自动生成的 C# 代码那样干净,但它更快更容易重复。操作方法如下:stackoverflow.com/a/1316313/1373170
-
嘿巴勃罗。感谢您的建议,这实际上是我目前作为解决方法所做的。使用带有导出“仅数据”选项的“生成脚本”命令效果很好,并且将脚本签入源代码管理非常适合比较和保存修订。我遇到的唯一问题是这违反了 Code First 范式,并且向实体添加新属性会导致手动编辑脚本文件非常痛苦。不过,我会投票赞成您的答案,因为它绝对是迄今为止最好的替代解决方案之一。
-
你为什么一直删除数据库并重新填充?你不能只使用 EF 迁移吗?那你一般就不用养了?
-
对于生产,不删除数据库并重新填充是完全有意义的。但是,对于开发和测试环境,拥有可以以一致方式运行自动化测试的基线数据集是很有用的。随着时间的推移,数据可能会变得与孤立的行和不存在的弱关系非常不一致。此外,当多个开发人员对架构进行各种实验并且都可以实例化数据库的本地副本时,拥有一组可以轻松重建的基线数据非常有用。
标签: c# sql-server asp.net-mvc entity-framework ef-code-first