我在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但是这会在下次验证模型时被覆盖。
任何人都知道我在这里碰到了什么?
答案 0 :(得分:2)
之前我遇到过类似的问题,通过以下步骤解决了这个问题:
在数据库端将id
身份更改为uniqueidentifier
,可以通过表设计器或SQL查询来实现,如下所示:
ALTER TABLE AdminList ALTER COLUMN id uniqueidentifier
在XML编辑器中打开EDMX文件的内容,找到代表目标表名称的EntityType
元素,然后更改Property
列的id
元素,其数据类型与定义的相同在DB中如下:
<EntityType Name="AdminList">
<Property Name="id" Type="uniqueidentifier" Nullable="False" />
</EntityType>
注意:如果您想在提交记录时避免EF设置<Property StoreGeneratedPattern="Identity" />
列值,则可以使用id
。
保存并重建模型。
如果您出于某些原因不想删除EDMX文件,则上述解决方案适用。
如果在编辑EDMX文件后问题仍然存在,最简单的方法是删除所有与EDMX相关的文件( ModelName .edmx, ModelName .Context.cs , ModelName .tt等),然后使用当前表模式重新创建EDMX文件。
补充参考: