C# 成员映射在实体框架中无效

C# 成员映射在实体框架中无效,c#,entity-framework,C#,Entity Framework,我正在Azure上学习实体框架,ID字段必须是nvarchar(255)。当我连接到DB以获取模型时,它将ID字段下拉为type string,这给了我插入新记录时的问题。解决方案是将类型字符串切换为类型Guid。然后,我可以提交一条新记录,“默认”sql值将生成新的Guid 然而,在我浏览了模型并将id从字符串重置为Guid后,我得到了以下消息,这对我来说没有多大意义: 错误:指定的成员映射无效。“LearnModel.AdminList”类型中成员“id”的类型“Edm.Guid[Nulla

我正在Azure上学习实体框架,ID字段必须是
nvarchar(255)
。当我连接到DB以获取模型时,它将ID字段下拉为type string,这给了我插入新记录时的问题。解决方案是将类型字符串切换为类型Guid。然后,我可以提交一条新记录,“默认”sql值将生成新的Guid

然而,在我浏览了模型并将id从字符串重置为Guid后,我得到了以下消息,这对我来说没有多大意义:

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

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


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

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

  • 通过表设计器或SQL查询将数据库端的
    id
    identifier更改为
    uniqueidentifier
    ,如下所示:

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

    <EntityType Name="AdminList">
        <Property Name="id" Type="uniqueidentifier" Nullable="False" />
    </EntityType>
    
    
    
    注意:如果您希望在提交记录时避免EF设置
    id
    列值,可以使用
    (请参阅)

  • 保存并重新生成模型

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

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

    附加参考:


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

  • 通过表设计器或SQL查询将数据库端的
    id
    identifier更改为
    uniqueidentifier
    ,如下所示:

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

    <EntityType Name="AdminList">
        <Property Name="id" Type="uniqueidentifier" Nullable="False" />
    </EntityType>
    
    
    
    注意:如果您希望在提交记录时避免EF设置
    id
    列值,可以使用
    (请参阅)

  • 保存并重新生成模型

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

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

    附加参考:


    如果您使用的是EDMX,请尝试将
    id
    列类型更改为“uniqueidentifier”,然后重新生成模型(可能需要删除并重新添加EDMX文件以生成正确的数据类型)。如果可以,我会接受这个答案!无论如何,这不是一项快速的任务。。。正如你所说,我还必须删除模型并重新创建它。感谢您的帮助。如果您使用的是EDMX,请尝试将
    id
    列类型更改为“uniqueidentifier”,然后重建模型(可能需要删除并重新添加EDMX文件以生成正确的数据类型)。如果可以,我会接受这个答案!无论如何,这不是一项快速的任务。。。正如你所说,我还必须删除模型并重新创建它。感谢您的帮助。作为补充说明,我很惊讶MS建议我将ID列创建为nvarchar()。它应该是uniqueidentifier。作为补充说明,我很惊讶MS建议我将ID列创建为nvarchar()。它应该是唯一标识符。