我在Visual Studio 2010中有一个使用Entity Framework 4.0的项目。我有以下代码:
using (var db = new MyEntities())
{
var dbLead = db.Leads.CreateObject();
dbLead.Email = lead.Email;
db.Leads.AddObject(dbLead);
db.SaveChanges();
}
其中MyEntities
是通常的EF对象上下文。 Lead
是EF生成的类,它映射到数据库中的相应表。除了上面代码中指定的Email
属性之外,Lead
类还有Id
属性,我没有在此明确设置。所有预期的东西,没什么奇怪的。
我在调用db.SaveChanges()
时遇到异常,引用“重复主键”作为问题。但是,在DB中,我将相应的列标记为主键,而在.edmx设计器中,相应的属性标记为EntityKey为true,StoreGeneratedPattern标记为Identity。
夫妻问题:
为什么设计师在生成类时默认情况下将StoreGeneratedPattern默认设置为Identity,假设基础表的相应列设置为主键?在我的情况下,我必须进入设计器中的每个类,并为每个主键属性自己设置此值(尽管有趣的是,默认情况下,EntityKey设置为true,如预期的那样)。
它还没有用......为什么?我已经尝试将StoreGeneratedPattern设置为Computed,但没有运气(预计,否则我会想知道为什么将它设置为Computed修复了问题)。
答案 0 :(得分:3)
尝试为数据库中的IsIdentity
列设置Yes
到Id
。我认为这是问题,因为你提到EF本身没有将StoreGeneratedPattern
设置为Identity
。