如何在 EF 代码优先中禁用链接表的级联删除?

2023-11-30

我想禁用实体框架代码优先的链接表的级联删除。例如,如果许多用户拥有许多角色,并且我尝试删除一个角色,我希望阻止该删除unless当前没有与该角色关联的用户。我已经删除了我的级联删除约定OnModelCreating:

protected override void OnModelCreating(DbModelBuilder modelBuilder) {
    ...
    modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();

然后我设置用户角色链接表:

modelBuilder.Entity<User>()
    .HasMany(usr => usr.Roles)
    .WithMany(role => role.Users)
    .Map(m => {
        m.ToTable("UsersRoles");
        m.MapLeftKey("UserId");
        m.MapRightKey("RoleId");
    });

然而,当 EF 创建数据库时,它会为外键关系创建一个删除级联,例如。

ALTER TABLE [dbo].[UsersRoles]  WITH CHECK ADD  CONSTRAINT [FK_dbo.UsersRoles_dbo.User_UserId] FOREIGN KEY([UserId])
REFERENCES [dbo].[User] ([UserId])
ON DELETE CASCADE
GO

ALTER TABLE [dbo].[UsersRoles]  WITH CHECK ADD  CONSTRAINT [FK_dbo.UsersRoles_dbo.Role_RoleId] FOREIGN KEY([RoleId])
REFERENCES [dbo].[Role] ([RoleId])
ON DELETE CASCADE
GO

如何停止 EF 生成此删除级联?


我得到了答案。 :-) 这些级联删除的创建是因为ManyToManyCascadeDeleteConvention。您需要删除此约定以防止它为链接表创建级联删除:

modelBuilder.Conventions.Remove<ManyToManyCascadeDeleteConvention>();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 EF 代码优先中禁用链接表的级联删除? 的相关文章

  • 获取光标相对于控件的位置 - C#

    我想获取鼠标相对于鼠标指针所在控件的位置 这意味着当我将光标置于控件的起点 左上角 时 它应该给出 0 0 我正在使用以下代码 private void panel1 MouseMove object sender MouseEventAr
  • 实体框架 5 不清除导航属性

    我在 Entity Framework 5 中遇到了这个奇怪的问题 我在其中一个实体中有一个导航属性 我想将其设置为null 但由于某种原因 该属性只有在我第二次调用该属性时才会被清除 using var db new Entities v
  • 使用 std::string 导致 Windows“找不到入口点”[重复]

    这个问题在这里已经有答案了 当我用 G C C 编译它时 include
  • 将 gcov 与 CMake/CDash 结合使用的详细指南?

    我在我的项目中使用 CMake 并设置了 cdash 服务器以进行连续 夜间构建 一切运行良好 通过设置 crontab 我们可以将每小时 每晚的构建 测试结果自动上传到我们的 cdash 服务器 我的下一步是将测试覆盖率报告添加到构建中
  • 如何在Qt无框窗口中实现QSizeGrip?

    如何使用 Qt 无框窗口实现 QSizeGrip 代码会是什么样的 您只需在布局内窗口的一角添加 QSizeGrip 即可使其保持在该角落 QDialog dialog new QDialog 0 Qt FramelessWindowHin
  • DLL 需要访问其应用程序的符号

    在 C 中 DLL 是否可以访问加载它的应用程序的某些符号 我有一个加载插件 dll 的应用程序 这些插件需要访问该应用程序的某些API 是否可以在不创建共享此 API 的新 DLL 的情况下实现此目的 函数指针结构适合这种情况吗 示例 主
  • 是否有更好(更简单)的方法来获取特定域 SID?

    我被指派修改 WinForms 应用程序 主要检查登录用户是否属于特定域 这是我到目前为止所想出的 byte domainSid var directoryContext new DirectoryContext DirectoryCont
  • 我需要一个树转储选项,该选项在当前的 gcc 版本中不再存在

    旧版本的 GCC 例如 4 0 2 或 4 1 2 有该选项 df see 用于调试程序或 GCC 的选项对于4 1 2 http gcc gnu org onlinedocs gcc 4 1 2 gcc Debugging Options
  • 如何检测数据库类型?

    我需要确保我连接的数据库是 MySQL 而不是 PostgreSQL 或 Microsoft SQL Server 我怎样才能知道正在使用哪种类型的数据库 第一个提示可能是如果您尝试使用 mySQL 数据库驱动程序连接到 PostgreSQ
  • 接口中的私有成员

    是否可以在 NET 接口中创建私有成员 我听说现在可以了 但我的 IDE 拒绝了 public interface IAnimal void SetDefaultName string name ChangeName name privat
  • 为什么long long 2147483647 + 1 = -2147483648? [复制]

    这个问题在这里已经有答案了 为什么这段代码不打印相同的数字 long long a b a 2147483647 1 b 2147483648 printf lld n a printf lld n b 我知道int变量的最大数量是2147
  • MSBuild 将动态生成的文件复制为项目依赖项的一部分

    我有一个自定义 msbuild 任务 它正在生成一些输出文件到 ProjectA 的输出目录 TargetDir 当前的代码是这样的
  • C#中如何将委托转换为对象?

    我正在使用反射类来调用其他 dll 上的一些方法 方法的参数之一是委托类型 我想通过使用反射来调用这个方法 所以我需要将函数参数作为对象数组传递 但我找不到任何关于 如何将委托转换为对象 提前致谢 委托是一个对象 只需像平常一样创建预期的委
  • 将 libpng 链接到 android 原生项目

    我在尝试在本机 Android 项目中加载 libpng 时遇到问题 编译器似乎无法识别 libpng 函数 但可以识别类型 如 png byte 它可以正常编译类型 但如果我添加函数 则会抛出错误 这是编译输出 Windows 7 cmd
  • Facebook Graph API“/userid/feed”返回空白

    我正在使用 Facebook C SDK 但似乎无法使用 Graph API 获取反馈数据 我已从用户那里获得了以下扩展权限 范围 离线访问 publish stream publish checkins create event read
  • Cuda:最小二乘求解,速度较差

    最近 我使用Cuda编写了一个名为 正交匹配追踪 的算法 在我丑陋的 Cuda 代码中 整个迭代需要 60 秒 而 Eigen lib 只需 3 秒 在我的代码中 矩阵 A 是 640 1024 y 是 640 1 在每一步中 我从 A 中
  • 正则表达式基于组的不同替换?

    所以我对正则表达式比较陌生 并且做了一些练习 我正在玩一个简单的 混淆器 它只是寻找 dot or dot or at or at 不区分大小写 并且在匹配项之前或之后有或没有任意数量的空格 这是针对通常情况的 someemail AT d
  • 为 C++ 类播种 rand()

    我正在开发一个 C 类 它使用rand 在构造函数中 我真的希望这个班级在几乎所有方面都能照顾好自己 但我不知道在哪里播种rand 如果我播种rand 在构造函数中 每次构造我的对象类型的新实例时都会对其进行播种 因此 如果我按顺序创建 3
  • Android NDK - 仅用 C/C++ 编写

    有没有一种可能的方法可以使用 C C 编写整个 NDK 应用程序 而无需像 hello jni 示例项目 HelloJni java 中那样的 Java 入门 类 以某种方式创建一个 HelloJni c 来执行相同的操作 从 Androi
  • GetActiveObject() 与 GetObject() -- MK_E_UNAVAILABLE 错误

    All 我在将一些 VBA 代码转换为 C 时遇到一些问题 我们有一个充当本地 COM 服务器的第 3 方应用程序 在我们使用的VBA代码中获取对象 获取对现有对象的引用 e g Set appHandle GetObject ProgId

随机推荐

  • 为什么正则表达式中的转义字符不匹配?

    如果我想匹配点符号 我必须写这个正则表达式 需要转义字符来匹配符号本身 如果我想匹配 d 符号 我必须写这个 d 转义字符是not需要匹配符号本身 如果我想匹配任何字符 或任何数字字符 d 反之亦然 在我看来 这种做法不太一致 其背后的理由
  • 未找到类型

    我刚刚更新了 angular cli v1 1 并使用创建了一个新项目ng new MyProj 然后我添加并安装了两个依赖项项目 json file dependencies toastr 2 1 2 spin 0 0 1 devDepe
  • 如何使用 openxml 在 Excel 文件单元格中的文本上应用字体和颜色

    我是 Openxml 新手 我正在尝试使用 openxml 创建 xlsx 文件 我想对Excel文件中不同单元格的文本应用不同的字体和颜色 我使用它来创建 xlsx 文件 但无法执行字体和颜色部分 SpreadsheetDocument
  • Python 3.6 urllib 为什么行以 b 开头

    我正在使用 python 3 并且不明白为什么输出在每个行的开头都有 b 我不认为 python 2 是这种情况 为什么会这样以及如何删除它 谢谢 import urllib fhand urllib urlopen http www py
  • AngularJS 通过选择空选项进行过滤

    我正在尝试为 AngularJS 中的表构建一个过滤系统 我有一个产品列表 每个产品都与一个系统绑定 我希望能够在选择中列出所有系统 并按所选系统过滤产品 除了选择空选择选项 该选项会过滤掉所有系统 之外 这非常有效 这是我的示例代码 控制
  • PyCharm 奇怪的类型警告[重复]

    这个问题在这里已经有答案了 为什么下面的代码会这样 v None for in range 3 v 1 0 lt lt lt 告诉我这个 意外类型 整数 整数 可能的类型 整数 无 切片 可迭代 无 消除此类警告的一个简单解决方法是添加类型
  • 在 MATLAB 中使用 sendmail 指定抄送地址

    MATLAB 的典型使用 调用sendmail函数看起来像这样 content body text attachments attachment pdf set preferences setpref Internet SMTP Serve
  • 如何检索实际的 OleDb 表架构(不包括其他表列)

    当我运行此代码时 它还会检索表中不存在的一些其他字段 我怎样才能克服这个问题 Dim conn As New OleDb OleDbConnection Create a connection string for an Access da
  • 从 C 到 Objective-C 的回调方法

    我有一个 Objective C 课程 我正在做的是在 Objective C 类中调用 C 函数 这个 C 函数是我在一个文件中实现的 该文件是这个示例 ios 项目的一部分 所有 C 函数都工作正常 到目前为止没有任何问题 当我尝试调用
  • 通过 PHP 使用 maxlength 标签检查表单输入长度

    我的问题很简单 如果我在 HTML 表单中有一些带有 maxlength 标记的输入字段 我也必须通过 PHP 检查输入长度吗 您应该这样做 因为任何人都可以 复制 您的表格并使用它 服务器端检查比客户端更好 它是安全的 例如 您的表格
  • 如何让动画和手势识别器协同工作? (迅速)

    我做了一个简单的项目 带有滑动手势识别器和动画 我让标签移动并且每 3 秒增加一次数字 每次滑动我都需要减少数量 我的手势识别器对象与标签绑定在一起 即它仅在标签范围内工作 当 prog 在没有动画的情况下工作时 一切正常 但是当它有动画时
  • 这个函数签名在sml中是什么意思?

    我正在查看我的教授关于 SML 语言的一些注释 其中一个函数如下所示 fun max gt let fun lp curr curr lp curr a l if gt a curr then lp a l else lp curr l i
  • 返回并使用带有匹配的泛型类型

    我正在开发一个简单的 Rust 应用程序 它接受标准输入并根据它进行操作 我想让每个命令返回一个结果向量 不同的命令可能返回不同类型的向量 这list方法返回一个向量PathBufs 但默认匹配臂返回字符串 use std io fs us
  • 无法在 Apache Tomcat 上运行 JAX-WS Java Web 服务

    Summary 我的任务是编写一个 Java Web 服务来集成企业环境中的两个不同的系统 由于我实际上是一名经验丰富的 C NET MVC 开发人员 并且只认为自己在 Java 方面处于中级水平 因此我首先搜索 Java Web Serv
  • DllImport 非托管、非 .NET Dll 到表示 Char * 和 Void __StdCall 的 .NET 项目

    我有一个用 Borland C 编写的非 net 和非托管 DLL 需要导入 它返回 void 并在函数上具有标识符 stdcall 它还需要传递 char 当我尝试将其添加为 VS 2005 中项目的引用时 它返回无效程序集的错误 我怎样
  • JTabbedPane 中的选项卡不反映按下按钮时的更改

    在我的 GUI 的选项卡中 用户可以编辑员工的姓名 该名称还用作选项卡的标签 因此当确认更改时 应更新选项卡以反映此更改 并将新数据写入数据文件 员工被存储在HashMap在课堂里Employees 这些选项卡是通过迭代来填充的ArrayL
  • 简单 lambda 表达式代码上的“AssignmentOperator Expression”错误

    我现在正在学习如何使用 lambda 表达式 并且我已经看过一些带有简单示例的教程 int x gt x 5 但我的编译器显示此错误 Syntax error insert AssignmentOperator Expression to
  • 任务执行失败:app:processDebugManifest Android Studio 2.3.3

    添加后出现编译错误CardView and 回收视图依赖关系 我检查了每一篇文章 但似乎没有人解决这个问题 Error 错误 任务 app processDebugManifest 执行失败 清单合并失败 属性元数据 android sup
  • 如何将值从主窗体返回到不同的窗体或类(C#)

    由于某些未知的原因 这个愚蠢的事情无法实施 我有一个int count在我想返回到另一个类或表单的主表单中 namespace my speller public partial class login Form public login
  • 如何在 EF 代码优先中禁用链接表的级联删除?

    我想禁用实体框架代码优先的链接表的级联删除 例如 如果许多用户拥有许多角色 并且我尝试删除一个角色 我希望阻止该删除unless当前没有与该角色关联的用户 我已经删除了我的级联删除约定OnModelCreating protected ov