Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 它';从数据库中完全替换实体框架数据模型似乎是不可能的_C#_Sql Server_Entity Framework_Database First - Fatal编程技术网

C# 它';从数据库中完全替换实体框架数据模型似乎是不可能的

C# 它';从数据库中完全替换实体框架数据模型似乎是不可能的,c#,sql-server,entity-framework,database-first,C#,Sql Server,Entity Framework,Database First,基本上,我有一个Sql Server数据库,其模式发生了变化。发生这种情况时,我必须更新EF数据模型。如果我所做的只是添加或删除一个表,那么这很好:转到设计器,从它存在的多个位置之一找到“从数据库更新模型…”,然后执行向导 不幸的是,向导不允许我从数据库中替换整个模型。它一次也只能做一件事。因此,如果我做出了一个不幸的决定,做出了多个模式更改,甚至更糟糕的是,请忘记我做了什么:我必须执行多个步骤,从模型中添加、刷新和删除表 这显然很麻烦。因此,由于缺少更好的过程,我不得不放弃模型,并从数据库中重

基本上,我有一个Sql Server数据库,其模式发生了变化。发生这种情况时,我必须更新EF数据模型。如果我所做的只是添加或删除一个表,那么这很好:转到设计器,从它存在的多个位置之一找到“从数据库更新模型…”,然后执行向导

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

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


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

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


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

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


你可以在这里看到它的作用:……如果你想尝试一下,你可以从下载它。你的两个要求是矛盾的。你想放大整个模型,但同时你想保持你的定制。第一种情况在LINQtoSQLDesigner中是可能的,但每次更新模型时都会丢失所有更改。对于EF Designer,MS决定使用第二种方法,在这种方法中,Designer几乎从不接触CSDL空间(实体)中已经存在的任何内容,但只更改存储模型,并且在一些破坏性更改之后,您必须手动(在Designer中)修改模型。我使用了两个设计师,不得不说第二种方法的生产力和可用性要好得多。这也是为什么人们通常不会对此抱怨的原因

那些抱怨的人通常会这样做:

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

您的问题不在于实体框架及其不断变化的模式一旦开发完成,您必须扪心自问,为什么我需要不断地在ifrst位置进行模式变化!十年来,我一直在构建业务线web应用程序,我的经验是模式更改和迁移非常常见。这很好。我曾经被告知,这只有通过VS才能实现。欢迎你。VS Studio最有可能使用完全相同的工具。虽然克里斯托弗的工具看起来很棒,但我会选择这个作为答案,因为它不需要购买。我注意到你似乎无法用这个工具生成EDMX文件,这正是我需要的。不,你误解了。我从不涉及代码模型。我希望模型始终完全基于数据库。如果数据库发生了更改,无论更改是什么,实体框架模型都应该更新为完全匹配。好吧,我真的误解了你问题的一部分,但现在你至少知道为什么会这样。设计器不会跟踪您的更改,也不会从CSDL中删除项目以避免删除可能的更改。