【问题标题】:Member mapping is not valid in Entity Framework成员映射在实体框架中无效
【发布时间】:2017-02-01 22:42:49
【问题描述】:

我在 Azure 上学习 Entity Framework,ID 字段必须是 nvarchar(255)。当我附加到数据库以获取模型时,它会将 ID 字段作为类型字符串拉下,这在插入新记录时给我带来了问题。解决方案是将类型字符串切换为类型 Guid。然后我可以提交一条新记录,“默认”sql 值将生成新的 Guid。

但是,在我完成模型并将 id 从字符串重置为 Guid 后,我收到以下消息,这对我来说没有多大意义:

错误 2019:指定的成员映射无效。 'LearnModel.AdminList' 类型中成员 'id' 的类型 'Edm.Guid[Nullable=False,DefaultValue=]' 与 'SqlServer.nvarchar[Nullable=False,DefaultValue=,MaxLength=255,Unicode=True 不兼容'LearnModel.Store.AdminList' 类型中成员 'id' 的 ,FixedLength=False]'

我认为可能是 Unicode=true 给了我这个问题,但我没有看到可以在 VS 的模型中设置的任何地方。我发现另一篇文章提到进入并编辑 edmx 以添加 Unicode=true 但这会在下次验证模型时被覆盖。

有人知道我在这里遇到了什么吗?

【问题讨论】:

  • 如果您使用的是 EDMX,请尝试将 id 列类型更改为 'uniqueidentifier',然后重建模型(可能需要删除并重新添加 EDMX 文件以生成正确的数据类型)。跨度>
  • 如果可以的话,我会接受这个作为答案!无论如何,这不是一项快速的工作......我还必须删除模型并按照您所说的重新创建它。感谢您的帮助。

标签: c# entity-framework


【解决方案1】:

我之前也遇到过类似的问题,通过以下步骤解决了:

  1. 在数据库端将 id 标识更改为 uniqueidentifier,可以通过表设计器或 SQL 查询,如下所示:

    ALTER TABLE AdminList ALTER COLUMN id uniqueidentifier
    
  2. 在 XML 编辑器中打开 EDMX 文件的内容,找到代表目标表名称的 EntityType 元素,然后将 Property 元素更改为具有与 DB 中定义的相同数据类型的 id 列,如下所示:

    <EntityType Name="AdminList">
        <Property Name="id" Type="uniqueidentifier" Nullable="False" />
    </EntityType>
    

    注意:如果您想在提交记录时避免 EF 设置id 列值,可以使用&lt;Property StoreGeneratedPattern="Identity" /&gt;(请参阅this post)。

  3. 保存并重建模型。

如果您出于某些原因不想删除 EDMX 文件,则上述解决方案适用。

如果编辑 EDMX 文件后问题仍然存在,最简单的解决方法是删除所有与 EDMX 相关的文件(ModelName.edmx、ModelName.Context.cs , ModelName.tt 等),然后使用当前表架构重新创建 EDMX 文件。

补充参考:

Updating Entity Framework Model

【讨论】:

  • 附带说明,我很惊讶 MS 建议我将 ID 列创建为 nvarchar()。它应该是唯一标识符。
猜你喜欢
  • 1970-01-01
  • 2010-10-09
  • 2016-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-11
  • 2011-03-09
  • 2014-04-01
相关资源
最近更新 更多