2011-01-22 95 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