21

我刚开始使用EF并发现它很酷,但我遇到了一个问题,更新实体框架模型

问题:
我改变了表用户里面列的我的DB模式,这是Varbinary(50)之前我将其更改为VarChar(50),然后在MyModel.edmx设计器中我选择了“从数据库更新模型”,单击完成后我收到此错误。

错误:

 
    Error 2019: Member Mapping specified is not valid. 
    The type 'Edm.Binary [Nullable=False,DefaultValue=,MaxLength=100,FixedLength=False]' of member 
    'Email' in type 'LearnDBModel.User' is not compatible with SqlServer.varchar 
    [Nullable=False,DefaultValue=, MaxLength=50,Unicode=False,FixedLength=False]' of member 'Email' 
    in type 'LearnDBModel.Store.User'. 

让我知道如何解决它

+1

你有没有在数据库中的任何数据? – Xharze

+0

@Xharze其实我修改的表是空的。 –

回答

48

我以前碰到类似的问题,发现的方式来解决它是从表中删除该模型。保存并关闭模型。然后重新打开模型并重新添加表格。

+0

嘿,它的工作方式像魔术:),加上一个为 –

+0

你也可以剪切/保存/粘贴/保存 – FLICKER

+0

如果这没有奏效。你需要手动编辑。emdx文件 – FLICKER

1

无需担心。在模型中选择受影响的表格。如果您注意到,那么您会发现一个带有整数的新列名称后缀(此行为仅仅是因为该列的数据类型发生了更改)。

示例如果您的列名称是“Samplecolumn”,那么在从数据库更新模型后,您将获得带有Samplecolumn1的新列。您现在可以简单地删除旧列“Samplecolumn”,并使用常规类别下的属性窗口将新列“Samplecolumn1”重命名为“Samplecolumn”。

只需构建您的应用程序。错误将会消失。

+0

非常感谢您的帮助,+ 1对于 –

10

Shawn de Wet的解决方案工作正常,但如果您不想删除表格(例如与其他表格的关系..),您可以使用其他解决方案: 使用xml Editor,Ctrl + F打开您的edmx文件发现类似

Property Name="Email" Type="Binary" Nullable="false" MaxLength="50" FixedLength="false"

更新它的行:保存并重建

Property Name="Email" Type="String" Nullable="false" MaxLength="50" Unicode="false" FixedLength="false"

+0

没有尝试过,但它看起来不够好:) –

+0

令人惊叹的........ + 1。这帮助了我。谢谢... – User

-2

右键单击Model.edmx [图]上的更改表和“从数据库更新模型”中的属性。保存并运行

2

EF模型中的很多文件都会得到f ***** d。删除和添加实体是不够的。实体被复制为像table,table1,table_result,table1_result,table_result1等...模型更新是更新重复的引用而不是原始的。

我要打开记事本,手动修复这些文件:

EFModel.Context.cs 
EFModel.edxm 

和删除这些文件:

obj\Debug\edmxResourcesToEmbed\MYEfModel.csdl 
obj\Debug\edmxResourcesToEmbed\MYEfModel.msl 
obj\Debug\edmxResourcesToEmbed\MYEfModel.ssdl