2011-09-01 61 views
0

我對這個錯誤感到憤怒,無法解決它。 請一些絕地高手幫助我。EF重複值

我試圖保存trhee實體:Region,Content和RegionalContent。地區是好的,但區域內容必須與一個內容相關聯,每個內容可能有許多RegionalContents(翻譯)。但我總是得到一個DbUpdateException,它有一個UpdateException異常,它有一個SqlCeException異常,如下所示:

*無法插入具有相同索引的重複值。表名= XBLContents,約束名= PK_ XBLContents _000000000000001C *

我正在調試它幾天,並找不到錯誤。請注意,我還是一個小Padawan。

這是在他們正確的表保存對象的代碼:要調用SingleOrDefault當你知道1已經存在

Region region; 
if (!db.Regions.Any(x => x.ID == Locale)) 
{ 
    region = new Region { ID = Locale }; 
    db.Regions.Add(region); 
    db.SaveChanges(); 
} 
else 
    region = db.Regions.SingleOrDefault(x => x.ID == Locale); 

for (int i = start; i < (start + 2); i++) 
{ 
    string guid = itens[i].Groups["guid"].Value; 

    Content c = new Content(guid); 
    if (!db.Contents.Any(x => x.GUID == guid)) 
    { 
     c.Type = Type.ToString(); 
     c.PopularInfo(Locale); 

     db.Contents.Add(c); 
    } 
    else 
     c = db.Contents.SingleOrDefault(x => x.GUID == c.GUID); 

    RegionalContent regionalcontent;     
    if (!db.RegionalInfos.Any(x => x.ContentId == guid && x.RegionId == Locale)) 
    { 


     if (c.HTML == null) 
      c.PopularInfo(Locale); 

     regionalcontent = new RegionalContent(c, Locale); 
     regionalcontent.Region = region; 
     regionalcontent.Name = HttpUtility.HtmlDecode(itens[i].Groups["name"].Value); 

     db.RegionalInfos.Add(regionalcontent); 

     db.Contents.Add(c); 
     db.SaveChanges(); 
    } 
    else 
     regionalcontent = db.RegionalInfos.SingleOrDefault(x => x.ContentId == guid && x.RegionId == Locale); 

    c.RegionalInfo.Clear(); 
    regionalcontent.Region = region; 
    c.RegionalInfo.Add(regionalcontent); 

    Contents.Add(c); 
} 
+1

是最後一行'Contents.Add(c);'correct?不應該是'db.Contents.Add(c);'? – Eranga

+0

這是正確的。這是一個本地List,可以傳遞給View。我填充列表在這裏因爲外部我沒有DbContext對象。我將此列表作爲IEnumerable發送到視圖 programad

回答

1
  1. 。只需使用Single
  2. 我不會打電話SaveChanges到最後。
  3. 確定GUID每次都是唯一的嗎?
+0

是,GUID是主鍵,並且每次在Content表和RegionalInfos表上都有唯一的ContentId和regionId的複合主鍵。這是數據庫的第二遍。我通過了第一次沒有問題。當我第二次通過時,我知道內容表中已經有一行具有該GUID,但RegionalInfos上沒有Content + Regionid的唯一組合,因此需要爲現有內容創建一個新的Regionalinfo。 – programad

+0

謝謝,我發現了錯誤。那db.Contents.Add(c);是來自先前編碼的垃圾,其中內容「if」在RegionalContent「if」內。現在我遇到了一個與此代碼不同的問題。我應該如何繼續?創建一個新的問題或在這裏問問? – programad