微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – EF删除子集合

我有以下几点:

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.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐