我可以在EF5中使用MODEL-FIRST而不会丢失数据库中的数据吗?

时间:2012-11-10 16:56:46

标签: entity-framework-5

我想知道模型优先的方法。我希望在VS2012中使用模型设计器设计一个新的数据库。模型设计师的新功能,例如着色和分割模型部分非常棒。希望除了最初创建新数据库之外,还有使用模型设计器的目的。

我想执行以下步骤......

  1. 使用模型设计器,可视化设计并推送模型以创建初始数据库和表

  2. 将数据添加到表

  3. 在模型设计器中对表格进行更改(例如添加字段)

  4. 将更改推送到数据库(即更新数据库)

  5. 不要从第2步中丢失我的数据。另外,为了清除任何混淆......我是否提到我不想丢失数据?

  6. 请告诉我,这个显而易见的需求(即需要在不丢失数据的情况下,从头开始改进表及其字段)在EF的迭代中并未被忽视。

    EF(http://msdn.microsoft.com/en-us/data/ee712907.aspx)上的这个页面使得开发人员在编码优先和建模之前有相同的选择。对我而言,页面上的介绍视频会产生类似的印象。

    如果有一个简单的菜单选项或更好,但只是一种在模型更改时建立“自动推送到DB”的方法,那将是很好的。这样一旦进行了更改并单击了SAVE按钮,就会出现一个对话框“更新数据库?”。

    我看到使用代码优先有一个迁移选项。对于模型优先,我似乎无法找到相同的东西。我不明白为什么这是不可能的......毕竟我在代码优先编写的代码确实存在 - 它是由模型优先代码生成创建的。

    我保持手指交叉,希望有人会有一个简单的解决方案,也许是我忽略的东西,所有这些漫无目的/发泄都是徒劳的。 : - )

2 个答案:

答案 0 :(得分:0)

如果要在模型更改时修改数据库,则必须首先使用代码优先。即使这样,它也不是一些神奇的自动化过程,但你必须编写更改脚本。

首先使用模型,您最好的选择是每次生成一个新数据库,并使用Redgate的SQL Compare或Visual Studio Sql Server Database Project之类的工具创建更改脚本(DDL)。

我想补充一点,几乎不可能自动将数据库与模型同步。一些变化需要人工干预,例如删除字段并添加另一个字段无法与重命名/重新输入字段区分开。一些更改可以在模型中轻松完成,但需要在Sql Server中使用表重建脚本(例如,更改字段顺序),或者修改内容和结构的组合(例如,使字段不为空,添加外键)。 / p>

答案 1 :(得分:0)

目前唯一要做的事情是:

  1. 复制数据库文件...(备份)
  2. 允许EF根据型号
  3. 重新创建数据库
  4. 每个表将您的记录从备份复制粘贴到新的数据库。
  5. 这并不是那么容易,因为你需要按照特定的顺序复制粘贴因为关系而且它只适用于微小的更改,例如添加列和新表或删除标量列或删除表。

    但我确信这是处理问题的正确方法的开始,后者可以通过在两个共享相同表名和关系的数据库之间编写更通用的迁移应用程序来实现自动化。

    当关系不相同/表名更改/列名更改时,更深层次的问题开始。