更新实体框架模型

时间:2012-05-19 17:16:50

标签: c# visual-studio-2010 sql-server-2008 entity-framework linq-to-entities

我刚开始使用EF并发现它很酷,但我遇到了一个问题,

问题:
我更改了表User中的列的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'.

让我知道如何解决它

6 个答案:

答案 0 :(得分:60)

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

答案 1 :(得分:13)

Shawn de Wet的解决方案工作正常但是如果您不想删除表(例如与其他表的关系......),您可以使用另一种解决方案: 使用xml编辑器打开edmx文件,按Ctrl + F查找类似于

的行
  

物业名称="电子邮件"类型="二进制"可空="假"的MaxLength =" 50"定长="假"

将其更新为:

  

物业名称="电子邮件"类型="字符串"可空="假"的MaxLength =" 50"的Unicode ="假"定长="假"

保存并重建。

答案 2 :(得分: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

答案 3 :(得分:1)

无需担心。在模型中选择受影响的表。如果你观察到,你会发现一个带有整数的新列名称post fix(这种行为只是因为该列数据类型的变化)。

如果您的列名称为“Samplecolumn”,则在从数据库更新模型后,您将获得一个包含Samplecolumn1的新列。您现在只需删除旧列“Samplecolumn”,并使用常规类别下的属性窗口将新列“Samplecolumn1”重命名为“Samplecolumn”。

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

答案 4 :(得分:0)

转到MyModel.edmx xml文件,将Binary更改为String解决了我的问题

答案 5 :(得分:-2)

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