开发者

EF Duplicated Value

Im getting angry with this error and cannot solve it. Please, some Jedi master help me.

I'm trying to save trhee Entities: Region, Content and RegionalContent. Region is OK but Regional Content has to be associated with one Content and each Content may have Many RegionalContents(Translations). But I always get a DbUpdateException that has a UpdateException that has a SqlCeException that says something like:

*Impossible to insert a duplicated value with same index. Table name = XBLContents,Constraint name = PK_XBLContents_000000000000001C *

I'm debugging it for some days and could not find the error. Please, note that I'm still a little Padawan.

This is the code that saves the objects in they proper Tables:

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 == nu开发者_StackOverflow中文版ll)
            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. You are calling SingleOrDefault when you know 1 already exists. Just use Single.
  2. I would not call SaveChanges to the very end.
  3. Are you sure the GUIDs are unique every time?
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜