开发者

EF Duplicated Value

开发者 https://www.devze.com 2023-04-01 16:22 出处:网络
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

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

精彩评论

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