8

基本上,我有一个架构更改的 Sql Server 数据库。发生这种情况时,我必须更新 EF 数据模型。如果我所做的只是添加或删除一个表,这很好:转到设计器,从它存在的多个位置之一找到“从数据库更新模型...”并通过向导。

不幸的是,向导不只是让我从数据库中替换整个模型。它一次也只能做一件事。因此,如果我做出了进行多个模式更改的不幸决定,甚至更糟,忘记我做了什么:我必须执行多个步骤,从模型中添加、刷新和删除表。

这显然很麻烦。因此,由于缺乏更好的程序,我不得不删除模型并完成从数据库重新创建它的所有步骤。废话:我把连接字符串留在了配置文件中。现在我必须删除它并重新启动向导,否则它不会生成相同的实体类名,现在我的所有代码都会中断。

为什么这不能为我吹走模型并从数据库中生成?更重要的是,为什么没有其他人问过这个问题?人们在做什么?

4

3 回答 3

4

如果您想吹走并替换模型,最简单的内置方法就是删除它并重新创建它。但是,如果您对模型进行了任何自定义,您当然也会失去它。

作为一种解决方法,为了允许连续增量模式更改(以及在两端应用的更改),我编写了一个实用程序,将数据库与 EF 模型的 SSDL 层进行比较,并将 SSDL 与 CSDL 层进行比较,显示差异并允许个人(或全部)要同步的差异。

在此处输入图像描述

您可以在这里看到它的实际效果:http ://www.youtube.com/watch?v=doqYOlcEAZM ...如果您想尝试一下,可以从http://huagati.com/edmxtools/下载它

于 2012-02-25T02:29:07.353 回答
1

您可以编写一个通过命令行执行此操作的 cmd 脚本:

http://msdn.microsoft.com/en-us/library/bb896270.aspx

于 2012-02-24T23:12:25.723 回答
0

你的两个要求是矛盾的。您想炸毁整个模型,但同时又想保持自定义。第一种情况在 Linq-to-Sql 设计器中是可能的,但是每次更新模型时都会丢失所有更改。对于 EF 设计器,MS 决定使用第二种方法,设计器几乎从不接触 CSDL 空间(实体)中已经存在的任何东西,而只更改存储模型,并且您必须在一些重大更改后手动修改模型一点点(在设计器中)。我使用了这两个设计师,不得不说第二种方法的生产力和可用性要好得多。这也是为什么人们通常不会抱怨这一点的原因。

抱怨的人通常会:

  • 购买一些工具(比如@Kristofer 引用的一个很棒的工具),因为 MS 完全跳过了与合并不同粒度级别的更改相关的任何内容,并且在不久的将来它不会变得更好
  • 编写一个脚本或自定义工具,每次删除整个模型时都会将所有更改放回原处(这是我们与 Linq-to-sql 一起使用的一种方式)
  • 不要使用设计器并手动维护 XML
  • 转到代码映射而不是 EDMX
于 2012-02-26T13:26:11.830 回答