【问题标题】:How to delete an entity which has many to many relation with other tables?如何删除与其他表具有多对多关系的实体?
【发布时间】:2013-11-26 09:33:03
【问题描述】:

我是实体框架的新手。是否可以直接从表中删除实体,而不是清除与其他表的所有多对多连接?

var artist = _artistDetailsRep.SingleOrDefault(d => d.ArtistID == id);

_artistDetailsRep.Delete(artist);
_artistDetailsRep.SaveChanges();

此代码抱怨是因为艺术家与艺术家类型有多对多的连接(约束)。所以下面是有效的

 artist.ArtistTypes.Clear();
_artistDetailsRep.Delete(artist);
_artistDetailsRep.SaveChanges();

我需要明确清除所有艺术家类型,然后删除艺术家。有没有办法自动做到这一点?基本上它应该自己删除所有连接,而不是我说删除那些约束?

您是否可以针对这些情况提出更好的方法?

【问题讨论】:

    标签: entity-framework asp.net-mvc-4


    【解决方案1】:

    您可以使用Cascading Deletes 让 SQL Server 为您执行此操作。 Entity Framework 还通过使用 Fluent API 中的 WillCascaseOnDelete() 方法对此提供支持,有关详细信息,请参阅 this articleThis question 也可能对您有所帮助。

    请记住,级联删除非常危险,代码中的一个错误可能会擦除数据库中的完整表。

    【讨论】:

    • 那么,这个默认没有开启?
    • @J.W.不,我希望不会。通常,当未配置此选项时,EF 会抛出有关违反引用约束的异常。
    猜你喜欢
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 2018-06-22
    • 2018-06-07
    • 1970-01-01
    • 1970-01-01
    • 2013-11-06
    相关资源
    最近更新 更多