4

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

我想执行以下步骤...

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

  2. 向表中添加数据

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

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

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

请告诉我这个明显的需求(即需要从头开始在不丢失数据的情况下改进表及其字段)在 EF 的第五次迭代中没有被忽视。

EF 上的这个页面 ( http://msdn.microsoft.com/en-us/data/ee712907.aspx ) 听起来,开发人员在先编码和先建模之间有平等的选择。对我来说,页面上的介绍视频产生了类似的印象。

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

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

我一直在祈祷,希望有人会有一个简单的解决方案,也许是我刚刚忽略的东西,所有这些漫无边际/发泄都是徒劳的。:-)

4

2 回答 2

0

目前唯一要做的就是:

  1. 复制您的数据库文件...(备份)
  2. 允许EF根据模型重新创建数据库
  3. 每个表将您的记录从备份复制粘贴到您的新数据库。

这并不容易,因为由于关系,您需要按特定顺序复制粘贴,并且它仅适用于较小的更改,例如添加列和新表或删除标量列或删除表。

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

当关系不同/表名更改/列名更改时,就会出现更深层次的问题。

于 2012-12-12T18:35:24.230 回答
0

如果您想在模型更改时修改数据库,您真的必须使用代码优先。即使那样,这也不是什么神奇的自动化过程,但您必须编写更改脚本。

使用模型优先,您最好的选择是每次生成一个新数据库并使用 Redgate 的 SQL 比较或Visual Studio Sql Server 数据库项目等工具创建更改脚本 (DDL) 。

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

于 2012-11-11T13:31:12.520 回答