是否支持导航属性的继承?

2023-12-31

很难找到相关的搜索结果...

给定这个模型:

public abstract class A
{
    public int ID { get; set; }
    public int CustomerID { get; set; }
    public virtual Customer Customer { get; set; }
}

public class B : A
{
}

public class C : A
{
}

public class Customer
{
    public int ID { get; set; }
    public virtual ICollection<B> Bs { get; set; }
    public virtual ICollection<C> Cs { get; set; }
}

使用此配置:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<A>().ToTable("As");
    modelBuilder.Entity<B>().ToTable("Bs");
    modelBuilder.Entity<C>().ToTable("Cs");

    base.OnModelCreating(modelBuilder);
}

我在数据库中得到这个结果:

问题:

不支持导航属性的继承吗?如果我添加public string SomeSharedProperty { get; set; } to A然后正如我所期望的,该属性的列仅出现在As table.

这其中有什么理由Customer_ID栏目中的Bs and Cs桌子?有没有办法告诉 EF 不要映射继承的属性?

Thanks!


首先,支持继承。但在这个特定的例子中,它似乎并不像你所期望的那样。

由于关系数据库不支持继承(正如我们从面向对象编程中了解到的那样),因此必须进行某种转换才能实现继承。

以下是详细介绍该问题的一系列博客文章:

  • 每个层次结构的表 http://weblogs.asp.net/manavi/archive/2010/12/24/inheritance-mapping-strategies-with-entity-framework-code-first-ctp5-part-1-table-per-hierarchy-tph.aspx
  • 每种类型的表 http://weblogs.asp.net/manavi/archive/2010/12/28/inheritance-mapping-strategies-with-entity-framework-code-first-ctp5-part-2-table-per-type-tpt.aspx
  • 每班表 http://weblogs.asp.net/manavi/archive/2011/01/03/inheritance-mapping-strategies-with-entity-framework-code-first-ctp5-part-3-table-per-concrete-type-tpc-and-choosing-strategy-guidelines.aspx

它还试图给出何时使用哪些策略的指导。

UPDATE
显然这比乍一看更棘手。您看到的很可能是由于循环引用造成的:A -> B -> Customer -> Bs.

The CustomerIDBs/C 的列不是从 As 表继承的列。它实际上是指定的关系属性的表示Customer class:

public virtual ICollection<B> Bs { get; set; }

结果是nullable CustomerID表 B 上的列。

public virtual ICollection<C> Cs { get; set; }

结果是nullable CustomerID表 C 上的列。

所以那些可为空的列用于表示关系Customer -> Bs and Customer -> Cs。他们的外表与Customer财产在A class.

您可以通过删除客户类的导航属性来轻松检查这一点。那么结果就是你所期望的:ACustomerIDA表上的列,没有CustomerIDB/C 表上的列。

所以为了解决这个问题你需要专门告诉EF如何解决循环引用。但不确定这是否可能,恐怕您需要省略 Bs/Cs 属性Customer并编写 LINQ 查询来检索信息。

如果您需要这些属性Customer你可以做的课程是这样的:

public class Customer
{
    public int ID { get; set; }

    // this is necessary to have access to the related Bs/Cs
    // also it cant be private otherwise EF will not overload it properly
    public virtual ICollection<A> As { get; set; }

    public IEnumerable<B> Bs { get { return this.As.OfType<B>(); } }
    public IEnumerable<C> Cs { get { return this.As.OfType<C>(); } }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否支持导航属性的继承? 的相关文章

  • 在 C# 中创建具有单独列的分隔文本

    我一直在尝试在 C 中创建一个制表符限制的文本文件 以便数据正确显示在单独的列中 Firstname Lastname Age John Smith 17 James Sawyer 31 我尝试过 t 字符 但我得到的只是 Firstnam
  • VB.NET 相当于 C# 属性简写吗?

    是否有与 C 等效的 VB NET public string FirstName get set 我知道你能做到 Public Property name As String Get Return name ToString End Ge
  • 如何读取扩展文件属性/文件元数据

    因此 我按照教程使用 ASP net core 将文件 上传 到本地路径 这是代码 public IActionResult About IList
  • 推导指南中的引用和值之间的差异

    考虑类型A template
  • 在新的浏览器进程中打开 URL

    我需要在新的浏览器进程中打开 URL 当浏览器进程退出时我需要收到通知 我当前使用的代码如下 Process browser new Process browser EnableRaisingEvents true browser Star
  • 互斥体实现可以互换(独立于线程实现)

    所有互斥体实现最终都会调用相同的基本系统 硬件调用吗 这意味着它们可以互换吗 具体来说 如果我使用 gnu parallel算法 使用openmp 并且我想让他们称之为线程安全的类我可以使用boost mutex用于锁定 或者我必须编写自己
  • XamlReader.Load 在后台线程中。是否可以?

    WPF 应用程序具有从单独的文件加载用户控件的操作 使用XamlReader Load method StreamReader mysr new StreamReader pathToFile DependencyObject rootOb
  • C++中的类查找结构体数组

    我正在尝试创建一个结构数组 它将输入字符串链接到类 如下所示 struct string command CommandPath cPath cPathLookup set an alarm AlarmCommandPath send an
  • 在 C# 中循环遍历文件文件夹的最简单方法是什么?

    我尝试编写一个程序 使用包含相关文件路径的配置文件来导航本地文件系统 我的问题是 在 C 中执行文件 I O 这将是从桌面应用程序到服务器并返回 和文件系统导航时使用的最佳实践是什么 我知道如何谷歌 并且找到了几种解决方案 但我想知道各种功
  • 生成(非常)大的非重复整数序列而不进行预洗牌

    背景 我编写了一个简单的媒体客户端 服务器 我想生成一个不明显的时间值 随从客户端到服务器的每个命令一起发送 时间戳中将包含相当多的数据 纳秒分辨率 即使它不是真正准确 因为现代操作系统中计时器采样的限制 等 我想做的 在 Linux 上
  • 获取 WPF 控件的所有附加事件处理程序

    我正在开发一个应用程序 在其中动态分配按钮的事件 现在的问题是 我希望获取按钮单击事件的所有事件 因为我希望删除以前的处理程序 我尝试将事件处理程序设置为 null 如下所示 Button Click null 但是我收到了一个无法分配 n
  • 关于在 Windows 上使用 WiFi Direct Api?

    我目前正在开发一个应用程序 我需要在其中创建链接 阅读 无线网络连接 在桌面应用程序 在 Windows 10 上 和平板电脑 Android 但无关紧要 之间 工作流程 按钮 gt 如果需要提升权限 gt 创建类似托管网络的 WiFi 网
  • 有人可以提供一个使用 Amazon Web Services 的 itemsearch 的 C# 示例吗

    我正在尝试使用 Amazon Web Services 查询艺术家和标题信息并接收回专辑封面 使用 C 我找不到任何与此接近的示例 所有在线示例都已过时 并且不适用于 AWS 的较新版本 有一个开源项目CodePlex http www c
  • 为什么在setsid()之前fork()

    Why fork before setsid 守护进程 基本上 如果我想将一个进程与其控制终端分离并使其成为进程组领导者 我使用setsid 之前没有分叉就这样做是行不通的 Why 首先 setsid 将使您的进程成为进程组的领导者 但它也
  • 编译时“strlen()”有效吗?

    有时需要将字符串的长度与常量进行比较 例如 if line length gt 2 Do something 但我试图避免在代码中使用 魔法 常量 通常我使用这样的代码 if line length gt strlen Do somethi
  • 线程和 fork()。我该如何处理呢? [复制]

    这个问题在这里已经有答案了 可能的重复 多线程程序中的fork https stackoverflow com questions 1235516 fork in multi threaded program 如果我有一个使用 fork 的
  • 英特尔 Pin 与 C++14

    问题 我有一些关于在 C 14 或其他 C 版本中使用英特尔 Pin 的问题 使用较新版本从较旧的 C 编译代码很少会出现任何问题 但由于 Intel Pin 是操作指令级别的 如果我使用 C 11 或 C 14 编译它 是否会出现任何不良
  • Linq-to-entities,在一个查询中获取结果+行数

    我已经看到了有关此事的多个问题 但它们已经有 2 年 或更长 的历史了 所以我想知道这方面是否有任何变化 基本思想是填充网格视图并创建自定义分页 所以 我还需要结果和行数 在 SQL 中 这将类似于 SELECT COUNT id Id N
  • 当另一个线程可能设置共享布尔标志(最多一次)时,是否可以读取共享布尔标志而不锁定它?

    我希望我的线程能够更优雅地关闭 因此我尝试实现一个简单的信号机制 我不认为我想要一个完全事件驱动的线程 所以我有一个工作人员有一种方法可以使用关键部分优雅地停止它Monitor 相当于C lock我相信 绘图线程 h class Drawi
  • 如何使用 Word Automation 获取页面范围

    如何使用办公自动化找到 Microsoft Word 中第 n 页的范围 似乎没有 getPageRange n 函数 并且不清楚它们是如何划分的 这就是您从 VBA 执行此操作的方法 转换为 Matlab COM 调用应该相当简单 Pub

随机推荐

  • 来自 Python 的 URL 请求

    我有一个正在运行的服务器 它总是在监听value field 我可以通过 URL 从网络浏览器发出请求 Eg http 192 168 1 101 value 1 我怎样才能从Python发出这样的请求 我尝试了上面的代码 但它似乎不起作用
  • 什么可以保护 Android AccountManager 密码不被其他应用读取?

    我正在编写 1 一个在 AccountManager 中存储用户名和密码的应用程序 以及 2 一个单独的后台服务应用程序 用于访问这些凭据以登录我的服务器等 通过使用这个 我发现我能够从服务 应用程序 2 调用 AccountManager
  • MatplotLib 通过轴获取所有注释

    我正在用 Python 和 Tkinter 做一个项目 我可以绘制一组数据 并且还实现了一个在单击鼠标时在绘图上添加注释的功能 但现在我需要我添加的所有注释的列表 有什么办法可以做到这一点吗 这是我添加注释的功能 def onclick s
  • Android 中的卷曲动画(如书本的打开页面)

    我正在开发一个包含许多图像 高清 的应用程序 这些图像将通过分别向左 向右交换屏幕来显示在下一个 上一个图像中 图像的更改应该像打开书页 卷曲动画http www youtube com watch v vOYvaNhSHw http ww
  • 是否可以将 VoiP 呼叫转接至 GSM [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 是否可以使用 Android 手机作为简单的 GSM 网关 电话将使用 最好 Android 内置 SIP 堆栈接收 VoiP 呼叫
  • 关于python中的global关键字

    coding utf 8 def func print x is x x 2 if I add this line there will be an error why print Changed local x to x x 50 fun
  • 仅获取程序集中定义的类型[重复]

    这个问题在这里已经有答案了 可能的重复 调用 Assembly GetTypes 时如何防止 ReflectionTypeLoadException https stackoverflow com questions 7889228 how
  • ObjectBox 是否有等效的 SQL Like 关键字

    我有一个使用 ObjectBox 在本地存储数据的项目 当我在 SQL 中执行查询时 我可以使用 来获取所有项目 因为我使用 Like 关键字来匹配模式 ObjectBox 是否有等效的方法在查询中执行此操作 不确定您的用例的具体情况 通常
  • 价格正则表达式?

    我正在寻找价格的正则表达式 所以前面应该是X个数字 而不是 最后最多是2个数字 有人可以支持我并发布吗 您将使用什么语言 它应该是这样的 d d 1 2 解释 前面的X号 is d where 表示字符串的开头 d表示一个数字并且 表示一个
  • .htaccess mod-rewrite 与子文件夹身份验证冲突

    我有一个网站 它使用 htaccess 将所有不存在的文件 文件夹的请求重定向到索引文件 RewriteCond REQUEST FILENAME s OR RewriteCond REQUEST FILENAME l OR Rewrite
  • Angular 4 routerLink - 重新加载当前路由

    我想问是否可以使用routerLink再次打开当前页面 我有这个菜单 ul li a Home a li li a Users a li ul 当当前 url 为www domain com users我想单击菜单中的 用户 并刷新此页面
  • 使用 typescript 强类型化 React-Redux 连接

    我在尝试输入反应组件的参数时遇到错误 我想严格输入组件的 props 和 state 上的属性 但是当我使用 Redux 这样做时 当我将 mapStateToProps 传递给 connect 函数时 我收到错误 这是组件代码 impor
  • Apache CXF - 凭证未从 WSS4JOutInterceptor 发送?

    我正在尝试使用 WS Security UsernameToken 规范 1 0 连接到 Web 服务 使用阿帕奇cxf 2 4 0 我从 CXF 文档复制了下面的代码 但得到 org apache cxf ws policy Policy
  • 在 .Net 字符串中表达大于 127 的字节值

    我正在使用字符串在 Net 中编写一些二进制协议消息 它mostly有效 除了一种特殊情况 我试图发送的消息是 String cmdPacket xFD x0B x16MBEPEXE1 myDevice Write Encoding ASC
  • 多线程wpf应用程序设置线程cultureinfo

    我正在开发一个多线程 wpf 应用程序 为了执行全球化 我尝试将当前线程 主线程 区域性设置为 app xaml cs 中的不变文化 以便应用程序域中的所有 C 对象都适用于区域性不变信息 但是 当许多线程开始使用调用的工作线程时 就会出现
  • 位域类型是否影响结构对齐

    我有以下结构 struct bf struct1 uint64 t bf1 1 uint64 t bf2 6 uint64 t bf3 2 uint64 t bf4 55 struct bf struct2 uint8 t bf1 1 ui
  • Silverlight 从“哑”服务器按需加载参考数据

    我有一个文本文件 其中包含 300 000 个单词的列表以及它们出现的频率 每行的格式为 Word FequencyOfOccurence 我希望可以从 C 代码中访问此信息 我无法对列表进行硬编码 因为它太长 并且我不确定如何从服务器上的
  • Google Webapp:如何动态地将数组值传递给 jquery 脚本

    我一直在寻找 StackOverflow 问题的答案日期选择器 禁用数据中的日期 https stackoverflow com a 58794323 1330560 我已经成功开发了一个小型网络应用程序 它使用 jQuery Datepi
  • 使用 Meteor 保存 jQueryUI 可排序列表顺序的最佳方法

    我需要一些指导 建议 以找到一种最佳方式来保存利用 Meteor 的可排序列表的顺序 以下是我正在尝试做的事情的缩小版本 该应用程序是一个简单的待办事项列表 用户的最终目标是对从数据库中获取数据的列表进行排序 当用户对任务进行排序时 我想保
  • 是否支持导航属性的继承?

    很难找到相关的搜索结果 给定这个模型 public abstract class A public int ID get set public int CustomerID get set public virtual Customer C