EF 4.0 - 多对多关系 - 删除问题

时间:2010-04-29 14:47:10

标签: entity-framework many-to-many

我的实体模型如下: Person,Store和PersonStores用于存储PeronId,StoreId的多对多子表 当我在下面的代码中找到一个人,并尝试删除所有StoreLocations时,它会如上所述从PersonStores中删除它们,但也会从Store Table删除它,这是不可取的。 此外,如果我有另一个拥有相同商店ID的人,那么它就失败了 "The DELETE statement conflicted with the REFERENCE constraint \"FK_PersonStores_StoreLocations\". The conflict occurred in database \"EFMapping2\", table \"dbo.PersonStores\", column 'StoreId'.\r\nThe statement has been terminated"正在尝试删除StoreId,但StoreId用于另一个PeronId,因此抛出了异常。

 Person p = null;
        using (ClassLibrary1.Entities context = new ClassLibrary1.Entities())
        {
            p = context.People.Where(x=> x.PersonId == 11).FirstOrDefault();
            List<StoreLocation> locations = p.StoreLocations.ToList();
            foreach (var item in locations)
            {
                context.Attach(item);
                context.DeleteObject(item);
                context.SaveChanges();
            }
        } 

1 个答案:

答案 0 :(得分:10)

问题在于您实际上并不想删除商店本身,只是删除商店与人之间的关系。尝试这样的事情:

 Person p = null;
 using (ClassLibrary1.Entities context = new ClassLibrary1.Entities())
 {
     p = context.People.Where(x=> x.PersonId == 11).FirstOrDefault();
     p.StoreLocations.Clear();
     context.SaveChanges();
 }

这会让你的人,从他的商店列表中删除所有商店,并保存更改。请注意,您可能需要using块中第一行的include语句,具体取决于ObjectContext的配置方式。