2011-01-22 99 views
1

我有一个项目在Visual Studio 2010中使用实体框架4.0我有以下代码:实体框架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标识为标识。

夫妇的问题:

  1. 为什么不是设计师很聪明,有StoreGeneratedPattern设置为当它生成的类的默认身份,假设基础表有相应的列设置为一个主键?在我的情况下,我不得不进入设计器的每个类,并为每个主键属性自己设置此值(不过,有趣的是,EntityKey默认设置为true,如预期的那样)。

  2. 它仍然不工作...为什么?我已经尝试将StoreGeneratedPattern设置为Computed,但没有运气(预计,否则我会想知道为什么将它设置为Computed修复了问题)。

+0

什么是您的DBMS? – 2011-01-22 20:07:43

+0

您使用默认代码生成模板? – 2011-01-22 20:11:53

回答

3

尝试将IsIdentityYes在数据库中Id列。我认为这是问题,因为您提到EF本身不会将StoreGeneratedPattern设置为Identity