我映射了两个表并在MVC中创建了脚手架。单击“创建”按钮后填写表单中的数据后,会出现以下错误。
类型的例外 ' System.Data.Entity.Infrastructure.DbUpdateException'发生在 EntityFramework.dll但未在用户代码中处理
附加信息:跨实体或关联共享的值 在多个位置生成。检查映射是否没有 将EntityKey拆分为多个存储生成的列。
答案 0 :(得分:3)
当您具有子类型表映射,但其主键设置为自动生成时,通常会发生此问题。这是有问题的,因为EF将根据根实体的密钥显式设置值。
如果上述问题确实存在,那么要解决问题,请设置" Identity Specification
"您的子表的表示为false。即从EDMX中删除 StoreGeneratedPattern="identity"
。
答案 1 :(得分:3)
如果看不到任何可以帮助你的innerexception消息(在调试期间),我找到了“身份规范”问题的解决方案。
在SQL Management Studio中(或在Visual Studio中的服务器资源管理器中),您必须打开导致问题的表并选择che主键。查看其属性,您将找到“身份规范”。你必须把它设置为“是”。
来源:http://www.technologycrowds.com/2015/07/system-data-entity-infrastructure-DbUpdateException.html
答案 2 :(得分:0)
在实体框架中,如果您提到任何字段作为键,那么它应该具有Isidentity属性为true,否则它将抛出此错误。
打开SQL Management Studio,您必须打开导致问题的表并选择主键(如模型中所述)。查看其属性,您将找到“身份规范”。您必须将其设置为“是”。
答案 3 :(得分:0)
检查表中的主键,如果没有,则设置主键为id 和身份规范“是身份YES”