C# 它';从数据库中完全替换实体框架数据模型似乎是不可能的
基本上,我有一个Sql Server数据库,其模式发生了变化。发生这种情况时,我必须更新EF数据模型。如果我所做的只是添加或删除一个表,那么这很好:转到设计器,从它存在的多个位置之一找到“从数据库更新模型…”,然后执行向导 不幸的是,向导不允许我从数据库中替换整个模型。它一次也只能做一件事。因此,如果我做出了一个不幸的决定,做出了多个模式更改,甚至更糟糕的是,请忘记我做了什么:我必须执行多个步骤,从模型中添加、刷新和删除表 这显然很麻烦。因此,由于缺少更好的过程,我不得不放弃模型,并从数据库中重新创建它的所有步骤。废话:我在配置文件中留下了连接字符串。现在我必须删除它并重新启动向导,否则它将不会生成相同的实体类名,现在我所有的代码都将中断C# 它';从数据库中完全替换实体框架数据模型似乎是不可能的,c#,sql-server,entity-framework,database-first,C#,Sql Server,Entity Framework,Database First,基本上,我有一个Sql Server数据库,其模式发生了变化。发生这种情况时,我必须更新EF数据模型。如果我所做的只是添加或删除一个表,那么这很好:转到设计器,从它存在的多个位置之一找到“从数据库更新模型…”,然后执行向导 不幸的是,向导不允许我从数据库中替换整个模型。它一次也只能做一件事。因此,如果我做出了一个不幸的决定,做出了多个模式更改,甚至更糟糕的是,请忘记我做了什么:我必须执行多个步骤,从模型中添加、刷新和删除表 这显然很麻烦。因此,由于缺少更好的过程,我不得不放弃模型,并从数据库中重
为什么这不能为我吹走模型并从数据库生成?更重要的是,为什么没有其他人问这个问题?人们在做什么?您可以编写一个cmd脚本,通过命令行执行此操作:
如果您想删除并替换模型,最简单的内置方法就是删除它并重新创建它。但是,如果您对模型进行了任何自定义,那么您当然也会失去它 作为一种解决方法,为了允许连续的增量模式更改(以及两端应用的更改),我编写了一个实用程序,将数据库与EF模型的SSDL层进行比较,将SSDL与CSDL层进行比较,显示差异,并允许对个别(或全部)差异进行同步
你可以在这里看到它的作用:……如果你想尝试一下,你可以从下载它。你的两个要求是矛盾的。你想放大整个模型,但同时你想保持你的定制。第一种情况在LINQtoSQLDesigner中是可能的,但每次更新模型时都会丢失所有更改。对于EF Designer,MS决定使用第二种方法,在这种方法中,Designer几乎从不接触CSDL空间(实体)中已经存在的任何内容,但只更改存储模型,并且在一些破坏性更改之后,您必须手动(在Designer中)修改模型。我使用了两个设计师,不得不说第二种方法的生产力和可用性要好得多。这也是为什么人们通常不会对此抱怨的原因 那些抱怨的人通常会这样做:
- 购买一些工具(比如@Kristofer引用的一个很棒的工具),因为MS完全跳过了与合并不同粒度级别的更改相关的任何内容,而且在不久的将来不会更好
- 编写一个脚本或自定义工具,每次删除整个模型时都会将所有更改放回原处(这是我们在LINQtoSQL中使用的方法)
- 不要使用设计器并手动维护XML
- 转到代码映射而不是EDMX