首页 > 解决方案 > 实体框架多对多作为表

问题描述

抱歉,我已经有一段时间没有使用 vanilla EntityFramework 了。我有一些包含多对多关系的表。

public partial class Organization
{
    //...
    public virtual ICollection<aspnet_Roles> aspnet_Roles { get; set; }
}

SQL 中有一个中间表连接,我想从这个组织中删除角色。

我知道我可以从集合中删除实体,但是我需要为其他几个多对多引用执行此操作,所以我宁愿不将所有内容加载到内存中只是为了从集合中删除它。

当我在家里处理我的项目时,我只是在表格中添加了一个假属性,以便 EDMX 将所有内容生成为表格,但我怀疑我是否有权在工作中这样做。

我也不想运行原始 SQL,或将所有内容转换为使用 Code First。

有没有一种简单的方法可以从集合中删除引用而无需:

  1. 将所有内容加载到内存中
  2. 先转换成代码
  3. 运行原始 SQL 语句

标签: c#.netentity-framework

解决方案


您最好的选择似乎是在您的 EDMX 模型中创建一个存储过程,它将根实体的主键作为输入参数并在 SQL 端执行您的删除逻辑。我看到这个解决方案的唯一缺点是您仍然必须查询根实体/实体的 ID 到内存,但这不应该是一个很大的性能杀手。

在 SQL 端执行完整的删除逻辑是您可以获得的最佳性能。

如果您不熟悉 EDMX 中的 SP,这里是可以帮助您入门的官方文档。 EF 中的存储过程


推荐阅读