c# – EF删除子集合
发布时间:2020-12-15 21:45:14 所属栏目:百科 来源:网络整理
导读:我有以下几点: class City { int id; string Name; ICollectionPerson Persons;}class Person { int id; string Name;} 删除城市和所有相关人员的正确方法是什么? 可能我想避免外键约束并手动完成. 我试过了: public bool Delete(int id // City Id){ Cit
我有以下几点:
class City { int id; string Name; ICollection<Person> Persons; } class Person { int id; string Name; } 删除城市和所有相关人员的正确方法是什么? public bool Delete(int id // City Id) { City city = _db.Cities .Include(c => c.Persons) .First(c => c.Id == id); if(city != null) { foreach (Person person in city.Persons) { _db.Persons.Remove(person); } _db.Cities.Remove(city); _db.SaveChanges(); return true; } return false; } 但是没有人或城市被从数据库中删除. 解决方法
你的代码似乎正确……
您还可以尝试使用以下代码删除实体: foreach (Person person in city.Persons) { _db.Persons.Entry(person).State = EntityState.Deleted; } _db.Cities.Entry(city).State = EntityState.Deleted; _db.SaveChanges(); 还有一件事… 如果使用First来获取City,则if语句将始终为true,因为First期望匹配,并且当源序列为空时抛出InvalidOperationException. 看看你的代码我可以看到,如果按id匹配并且执行了删除,则该方法返回true,如果没有匹配则返回false.如果city为null,则应使用FirstOrDefault,如果源序列为空,则返回处理类型的默认值,在您的情况下为null. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |