更新实体框架模型
本文关键字:模型 框架 实体 更新 | 更新日期: 2023-09-27 18:34:37
我刚刚开始使用EF并发现它很酷,但是我遇到了一个问题,
问题:
我更改了表用户内列的数据库模式,之前我是 Varbinary(50(,然后我将其更改为 VarChar(50(,然后在 MyModel.edmx 设计器中我选择了"从数据库更新模型",单击完成后我收到了此错误。
错误:
错误 2019:指定的成员映射无效。 成员的类型"Edm.Binary [Nullable=False,DefaultValue=,MaxLength=100,FixedLength=False]" 类型"LearnDBModel.User"中的"电子邮件"与SqlServer.varchar不兼容 成员"电子邮件"的 [Nullable=False,DefaultValue=, MaxLength=50,Unicode=False,FixedLength=False]' 在类型'LearnDBModel.Store.User'中。
让我知道如何解决它
我以前遇到过类似的问题,发现解决它的方法是从模型中删除表。 保存并关闭模型。 然后重新打开模型并重新添加表。
Shawn de Wet的解决方案工作正常,但是如果您不想删除该表(例如与其他一些表的关系(,您可以使用其他解决方案:使用 xml 编辑器打开您的 edmx 文件,按 Ctrl + F 以查找类似于
属性名称="电子邮件" 类型="二进制" 可为空="假" 最大长度="50" 固定长度="假"
将其更新为:
属性名称="电子邮件" 类型="字符串" 可为空="假" 最大长度="50" Unicode="false" 固定长度="false"
保存并重建。
EF 模型中的许多文件都得到 f*****d。 删除和添加实体是不够的。实体被复制,如表、表1、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
无需担心。在模型中选择受影响的表。如果你观察,在那里你会发现一个新的列名 post fix,上面有一个整数(此行为只是因为该列的数据类型发生了变化(。
例如,如果您的列名称是"Samplecolumn",则从数据库更新模型后,您将获得一个带有 Samplecolumn1 的新列。现在,您只需删除旧列"Samplecolumn",并使用常规类别下的属性窗口将新列"Samplecolumn1"重命名为"Samplecolumn"。
只需构建您的应用即可。错误将消失。
转到MyModel.edmx xml文件,将二进制更改为字符串解决了我的问题
右键单击Model.edmx[Diagram]上已更改表中的属性和"从数据库更新模型"。 保存并运行