【问题标题】:Can I use MODEL-FIRST in EF5 withOUT losing the data in DB?我可以在 EF5 中使用 MODEL-FIRST 而不会丢失数据库中的数据吗?
【发布时间】:2012-10-30 17:08:35
【问题描述】:

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

我想执行以下步骤...

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

  2. 向表中添加数据

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

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

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

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

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

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

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

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

【问题讨论】:

标签: entity-framework-5


【解决方案1】:

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

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

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

【讨论】:

  • 虽然令人失望,但我非常感谢您的回复和意见。我不确定 Telerik 是如何做到的,但我使用了他们的 OpenAccess ORM 并借助视觉辅助,能够轻松完成这些任务。我想我可以使用他们的 ORM 或查看您的建议。我希望坚持使用 EF,因为它是 Microsoft 的内置工具。不知道如何在此处分隔段落...如果我重命名/添加/删除/缩短/延长字段,我希望 EF 模型的 GUI 尽最大努力。
  • 也许,但是,它只是不会发生在 GUI 中。有些工具可能比迁移更智能。例如,我可以在 Toad 中进行比在 SSMS 中更多的数据库重构。但是迁移可能会随着每个版本的发布而发展。恐怕现在不太舒服。
【解决方案2】:

目前唯一要做的是:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-07
    • 1970-01-01
    相关资源
    最近更新 更多