c# - 实体框架多对多作为表
问题描述
抱歉,我已经有一段时间没有使用 vanilla EntityFramework 了。我有一些包含多对多关系的表。
public partial class Organization
{
//...
public virtual ICollection<aspnet_Roles> aspnet_Roles { get; set; }
}
SQL 中有一个中间表连接,我想从这个组织中删除角色。
我知道我可以从集合中删除实体,但是我需要为其他几个多对多引用执行此操作,所以我宁愿不将所有内容加载到内存中只是为了从集合中删除它。
当我在家里处理我的项目时,我只是在表格中添加了一个假属性,以便 EDMX 将所有内容生成为表格,但我怀疑我是否有权在工作中这样做。
我也不想运行原始 SQL,或将所有内容转换为使用 Code First。
有没有一种简单的方法可以从集合中删除引用而无需:
- 将所有内容加载到内存中
- 先转换成代码
- 运行原始 SQL 语句
解决方案
您最好的选择似乎是在您的 EDMX 模型中创建一个存储过程,它将根实体的主键作为输入参数并在 SQL 端执行您的删除逻辑。我看到这个解决方案的唯一缺点是您仍然必须查询根实体/实体的 ID 到内存,但这不应该是一个很大的性能杀手。
在 SQL 端执行完整的删除逻辑是您可以获得的最佳性能。
如果您不熟悉 EDMX 中的 SP,这里是可以帮助您入门的官方文档。 EF 中的存储过程
推荐阅读
- powershell - 前台浏览器窗口
- canvas - 如何在画布中绘制带有圆形边框的图像?
- python - QWidget 关闭后如何打开 QWidget?
- checkbox - 如何知道是否已在代号的动态 UI 中选择了一个复选框
- interface - 多态是严格意义上的类型论吗?
- android - 是否可以在支持旧操作系统的 Android 应用程序中使用更新的 API?
- javascript - Rxjs 函数体内部有这么多昏迷扫描?
- c - 是否有任何情况下 C 静态关键字应该或可以在头文件中用于变量?
- javascript - 只需调用 jQuery 函数一次
- reactjs - 如何使用 react-transition-group 触发动画