我有以下内容:
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;
}
但是没有人或城市从数据库中删除。
答案 0 :(得分:1)
您的代码似乎正确......
您还可以尝试使用以下代码删除实体:
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
。
查看您的代码我可以看到,如果true
匹配并且执行了删除,则该方法返回id
,如果没有匹配则返回false
。要使city
为null
,您应使用FirstOrDefault
,如果源序列为空,则返回处理类型的默认值,在您的情况下为null
。