【问题标题】:How to delete all many-to-many relations without loading related entities in Entity Framework?如何删除所有多对多关系而不在实体框架中加载相关实体?
【发布时间】:2012-06-15 07:08:49
【问题描述】:

我有数据库方案,其中产品表与颜色表有多对多的关系。我正在使用 EF 并创建 POCO 对象:

public class Product
{ 
    public Guid Id {get;set;}
    public ICollection<Color> Colors {get;set;}
}

public class Color
{
    public Guid Id {get;set;}
    public ICollection<Product> Products {get;set;}
}

在许多情况下,有必要删除与产品相关的所有颜色并设置新颜色。所以我想删除所有多对多关系,但不知道相关颜色的 id。是否可以在不对 db 进行额外查询的情况下删除它们?我知道我可以只编写存储过程来删除指定产品与颜色的所有关系,但最好通过实体框架找到通用方法。

【问题讨论】:

  • 点击这个链接:[stackoverflow.com/questions/937140/…欢呼!
  • 我不想删除产品或颜色本身,我只想删除特定产品与所有颜色之间的所有关系。所以我不能使用级联删除,因为没有删除相关实体,只有删除关系。
  • 您可以将您的实体(产品或颜色)存储在一个临时变量中,并在删除后以不同的 id 插入它。我认为您找不到比这更有效的方法。
  • 在我的问题中只有一个简单的例子。在真实模型中,我对产品和颜色也有很多关系。因此,如果我删除颜色或产品,我会删除所有关系。所以我必须存储所有产品关系,然后删除产品,然后插入所有没有颜色关系的产品。这是非常低效的,在这种情况下我必须加载所有其他产品关系。

标签: entity-framework-4 ef-code-first many-to-many


【解决方案1】:

如果您不知道颜色键,则必须先加载它们才能删除它们 - EF 会逐条删除记录,因此它需要知道要删除哪条记录。

直接的选项是直接执行 SQL DELETE

dbContext.Database
         .ExecuteSqlCommand("DELETE FROM dbo.ProductColors WHERE ProductId = @Id", product.Id);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多