实体框架 CTP5,代码优先。具有级联删除功能的多对多

2024-02-11

我有两个实体(Customer 和 CustomerRole),想声明它们之间的多对多关系。我可以使用以下代码:

modelBuilder.Entity<CustomerRole>()
        .HasMany(cr => cr.Customers) 
        .WithMany(c => c.CustomerRoles)
        .Map(m => m.ToTable("Customer_CustomerRole_Mapping"));

但它创建的关系(和第三个映射表)默认关闭级联删除。使用多对多时,如何告诉 EF 创建级联删除打开的关系?


从CTP5开始,似乎没有办法通过Fluent API直接打开多对多关联的级联删除。

也就是说,如果您的目的是确保可以删除主体(例如客户记录),而不必担心连接表中的依赖记录(即 Customer_CustomerRole_Mapping),那么您不需要在数据库,因为当涉及多对多关联时,EF Code First 将处理客户端的级联删除。

例如,当您删除一个Customer对象时,EF足够聪明,首先发送一条删除语句来删除连接表中的依赖记录,然后它会发送另一个删除语句来删除该Customer记录。

Update:

由于 CTP5 中的错误,您需要显式急切/延迟加载导航属性,并在删除依赖项时将其加载到上下文中。例如,考虑这个模型:

public class User
{
 public int UserId { get; set; }
 public virtual ICollection Addresses { get; set; }
}

public class Address
{
 public int AddressID { get; set; } 
 public virtual ICollection Users { get; set; }
}

假设我们有一个在数据库中有地址的用户,这段代码将抛出:

using (EntityMappingContext context = new EntityMappingContext())
{
 User user = context.Users.Find(1); 
 context.Users.Remove(user);
 context.SaveChanges();
}

然而,这个可以完美地首先删除链接表的记录:

using (EntityMappingContext context = new EntityMappingContext())
{
 User user = context.Users.Find(1); 
((IObjectContextAdapter)context).ObjectContext
                                .LoadProperty(user, u => u.Addresses);
 context.Users.Remove(user);
 context.SaveChanges();
}

请注意,这只是一种解决方法,我们将能够(希望)删除主体而不加载其导航属性。

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

实体框架 CTP5,代码优先。具有级联删除功能的多对多 的相关文章

  • 如何将 GWT 与 Visual Studio 一起使用来创建 ASP.NET 网站?

    如何将 GWT 与 Visual Studio 一起使用来创建 ASP NET 网站 如果可能 GWT 可以与任何后端一起使用 只需做一些工作 它开箱即用 使用 servlet 容器 但您不需要保留此容器 容器中的关键项是加载GWT编译代码
  • 在 Asp.net MVC4 中访问 ViewBag 时出现 NullReferenceException

    我正在尝试访问ViewBag我认为的数据如下 span class small ViewBag BreadCrumb span 我正在发送那个ViewBag来自代码的数据 例如 ViewBag BreadCrumb topic Catego
  • 没有 Duende 身份服务器的 Blazor

    我有一个小型 Blazor WASM 项目 最近将其迁移到 net 6 但现在我尝试运行已发布的项目 应用程序警告我 我没有 Duende Identity Server 的许可证 我的问题是 我可以不用 Duende Identity S
  • 如何在 中继器中查找控件

    我有这个源代码 div div
  • Asp.net core webapi获取从Angular4应用程序发布的空值

    我是新来的Angular4在快速交付内容的情况下 所以没有时间彻底学习它 所以如果我的问题看起来很幼稚 请原谅 From my Asp Net Web API I have Confirmemail API必须从 Angular4 应用程序
  • MVC5 身份验证中“...与主域之间的信任关系失败”

    我有一个 ASP NET MVC5 应用程序not使用 Windows 身份验证 一切都工作正常 直到我尝试在正在开发的域之外运行应用程序并且 无论出于何种原因 得到 The trust relationship between this
  • 在 MS word .docs 中插入 MathMl 、 Tex 或 LaTex 方程?

    我一直在寻找 C 中 Net 的一些 dll 用于在 MS Word 中插入任何 MathMl Tex 或 LaTex 方程 我尝试了一些类似 DocX 的工具 但它们失败了 你知道吗 或任何提示如何做到这一点 谢谢 Word 2007 可
  • GridView必须添加到表单标签中才能渲染

    TextWriter tr new StringWriter HtmlTextWriter writer new HtmlTextWriter tr HtmlForm form new HtmlForm form Controls Add
  • 如何防止用户生成的 Sql 查询上的 Sql 注入

    我有一个项目 私有的 ASP net 网站 受 https 密码保护 其中要求之一是用户能够输入直接查询数据库的 Sql 查询 我需要能够允许这些查询 同时防止它们对数据库本身造成损坏 以及访问或更新它们不应该访问 更新的数据 我制定了以下
  • 查询字符串模型绑定 ASP.NET WebApi

    我有以下型号 public class Dog public string NickName get set public int Color get set 我有以下通过 API 公开的 api 控制器方法 public class Do
  • UserControl 中的 Web 控件为空?

    我构建了一个小型用户控件 它本质上是一个 DropDownList 其中包含一些基于目标属性设置的预设值 这是代码 public partial class Selector System Web UI UserControl public
  • 无法使用 System.Net.Mail.SmtpClient 将电子邮件发送到其他域

    请看下面的代码 client Credentials new NetworkCredential SMTP SERVER USERNAME SMTP SERVER PASSWORD client EnableSsl false client
  • 无需登录即可在 Intranet 上获取 Web 应用程序的域\用户名

    我的 Intranet 上有一个 Web 应用程序 VS 2005 有几个页面不需要用户登录应用程序 反馈和默认页面 我正在尝试获取要显示和 或发送反馈的域名和用户名 有没有一种方法可以在不需要用户登录的情况下执行此操作 我试过了this
  • 禁用实体框架的默认值生成(Code First)

    我数据库中有一个列不能为空 我想将其设置为默认值在数据库中 问题是实体框架似乎自己创建了一个默认值 例如 int gt 0 并且完全忽略了数据库中的默认值约束 有没有办法禁用实体框架的默认值 我发现您可以使用以下属性来装饰您的字段 Data
  • 包含从代码隐藏 (ASP.NET C#) 到 ASPX 中的图像概述的图像列表 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 多行有多个提交按钮,我应该为每个按钮制作一个表单吗?

    我列出了大约 20 行 每行代表一个订单 每行需要有 3 个按钮 每个按钮单击将执行不同的操作 我有 3 个操作来处 理每个按钮发布请求 我只是不确定如何为每个按钮设置 Html 表单 tr td td tr
  • 将 aspx 文件加载到 xmldocument 中

    我希望能够将 aspx 页面加载到 XmlDocument 变量中 我怎么做 这是我尝试过的 它期望 xml 文件而不是 aspx 页面 有没有办法将aspx页面即时转换为xml文档并加载它 谢谢 string filePath C Web
  • 多线程 Web 应用程序

    我知道有很多情况都是在应用程序中使用多线程的好例子 但是什么时候最好在 net Web 应用程序中使用多线程 Web 应用程序几乎肯定已经由托管环境 IIS 等 实现多线程化 如果您的页面受 CPU 限制 并且想要使用多个核心 那么可以说多
  • 更新面板工作速度非常慢

    我正在编写一个用户可以注册的应用程序 注册时 可以选择多个选项 并根据这些注册字段可见或不可见以及是否必需 我想出了一个想法 所有字段都将位于 updatePanel 中 当用户更改注册选项时 我将在服务器端设置这些字段的可见性 它可以工作
  • 正则表达式仅允许特定数字

    我正在寻找一个只允许输入特定数字的正则表达式 例如2 4 5 6 10 18 我尝试过类似的东西 2 4 5 6 10 18 我输入的任何内容都无法通过正则表达式 然后计算机用手指着我并大笑 我哪里出错了 单引号是不必要的 您正在寻找的正则

随机推荐