成员映射在Entity Framework中无效

时间:2017-02-01 22:42:50

标签: c# entity-framework

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

但是,在我完成模型并将ID从字符串重置为Guid之后,我得到了以下消息,这对我来说并不是很有意义:

  

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

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

任何人都知道我在这里碰到了什么?

1 个答案:

答案 0 :(得分:2)

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

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

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

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

    注意:如果您想在提交记录时避免EF设置<Property StoreGeneratedPattern="Identity" />列值,则可以使用id

  3. 保存并重建模型。

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

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

    补充参考:

    this post