实体框架继承映射 (TPH)

2024-03-25

我正在努力将项目从 nHibernate 转换为实体框架,并陷入映射继承的映射问题。

我有以下基类(为简洁起见缩短):

public abstract class Status
{
    public Guid Id { get; set; }
    public string Name { get; set; }
}

public class ProjectStatus : Status
{ 

}

public class TaskStatus : Status 
{

}

有人可以指出我如何编写映射的正确方向吗TaskStatus and ProjectStatus继承自Status?我想使用每个层次结构表(使用鉴别器全部保存在一个表中)


每个层次结构表是默认设置。除了已有的设置之外,您不需要提供任何其他设置。

这取自 TPH 示例博客网 http://weblogs.asp.net/manavi/inheritance-mapping-strategies-with-entity-framework-code-first-ctp5-part-1-table-per-hierarchy-tph:

public abstract class BillingDetail 
{
    public int BillingDetailId { get; set; }
    public string Owner { get; set; }        
    public string Number { get; set; }
}

public class BankAccount : BillingDetail
{
    public string BankName { get; set; }
    public string Swift { get; set; }
}

public class CreditCard : BillingDetail
{
    public int CardType { get; set; }                
    public string ExpiryMonth { get; set; }
    public string ExpiryYear { get; set; }
}

public class InheritanceMappingContext : DbContext
{
    public DbSet<BillingDetail> BillingDetails { get; set; }
}

这将创建一个名为 BillingDetails 的单个表,其中包含一个鉴别器列。

鉴别器列

正如您在上面的数据库架构中看到的,Code First 必须添加一个特殊的 区分持久类的列:鉴别器。 这不是我们的对象模型中持久类的属性; 它由 EF Code First 在内部使用。默认情况下,列名称为 “Discriminator”,其类型是字符串。这些值默认为 持久类名称 - 在本例中为“BankAccount”或“CreditCard”。 EF Code First 自动设置和检索鉴别器 价值观。

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

实体框架继承映射 (TPH) 的相关文章

随机推荐

  • 在 Xamarin UWP 中创建包后,视频仅通过语音播放,我看不到视频

    我正在使用最新版本的 MediaManager 插件来播放视频 当我在调试模式下运行应用程序时 一切正常 但是当我为窗口创建包时 视频不显示 只听到声音 我正在使用下面的包 插件 MediaManager Forms 这是我的 XAML 页
  • 在 ruby​​ 中定义全局方法的方法

    我正在写一个小 gem 我想定义一个类似 DSL 的方法 与desc and task中的方法Rake Rake 将它们定义为私有方法Rake DSL模块然后 self extend Rake DSL 将模块混合到主对象中 我是新手 如有错
  • 如何在 iOS 中访问 JPEG COM 段?

    JPEG 有很多标记段级别 我想读取和写入注释标记段级别 COM 读 写 它需要低级编程 我如何在 iOS 中访问它 参考 http help accusoft com ImageGear v18 1 Mac IGDLL 10 05 htm
  • 在 Adob​​e Flex 中将数据写入文本文件

    我是 Adob e Flex 新手 我想将存储在字符串变量中的一些数据写入文本 txt 文件中 有人可以在这里添加示例代码对我有帮助吗 谢谢 如果您的目标是 Flash 10 则可以写入文件 阅读本文以了解如何执行此操作 http www
  • 我怎样才能同时捕获 2 个以上的按键?

    最近我对创建 JS 游戏产生了兴趣 不是我有经验但我感兴趣的领域 我知道有几个 JS 游戏引擎 但我并不是真的想创建一个游戏 相反 我很好奇事物是如何工作的 我如何创建一个 我有几个问题 有人建议我在哪里可以阅读它吗 先决条件 需要什么知识
  • 从数据库 php 和 mysql 检索图像的损坏文件图标

    我需要从数据库上传和检索图像 我可以将图像存储在数据库中 但稍后无法显示 请帮忙 我编写了以下代码来从数据库中检索 result1 mysql query INSERT INTO userdata id username firstname
  • 从 SQL 存储过程导出文本文件

    我当前有一个进程存在于 2 个导出文本文件的 MS Access 数据库中 此过程在一天中发生两次 一次是在设定时间触发的自动化过程中 第二次是由应用程序前端的用户触发 这在两个数据库中都是相同的 现在我们正在将此应用程序重写为 SQL S
  • 基于代理/参与者的并发设计的设计模式[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 最近 我一直在研究支持参与者 代理 无共享架构的替代语言 即 scala clojure 等 clojure 也支持共享状态 到目前为止 我读过
  • 为什么 **find** 没有找到任何东西?

    我正在寻找安装在我的系统上的 shell 脚本文件 但是find不起作用 find usr name sh 但我知道那里有大量的脚本 例如 ls usr local lib sh usr local lib tclConfig sh usr
  • 为什么我在 Next.js 中得到这个? 具有无效的 `imagesrcset` 值

    我的轮播中有图像
  • 二叉搜索树过滤某个范围内的值

    我有一棵由 N 个元素组成的树 RBT 假设我有这棵树 N 7 4 2 6 1 3 5 7 如何以比 O N 更好的性能过滤某个范围内的值 例如打印 3 到 6 之间的所有值 有具体的算法吗 我想象它类似于找到值 3 log N 的位置 以
  • 使关闭按钮隐藏而不是关闭[重复]

    这个问题在这里已经有答案了 如何使表单上的关闭按钮有效地充当 隐藏 按钮 有没有办法中止FormClosing event 你可以只捕获FormClosing事件并停止默认操作 然后不关闭表单而只是隐藏它 private void Form
  • NetBeans 12 不再管理库

    一周前 我将 Java IDE 升级到 Netbeans 12 和 JDK 14 直到昨天我才注意到窗口 项目属性 MYPROG 缺乏基本功能 即没有用于编译的行 jar 并且大多数情况下没有任何行可以添加 jar库 而是有一个空行Java
  • 如何在 xamarin android 应用程序中使用动画?

    我想使用 Xamarin C 在我的 Android 应用程序中使用动画 动画 如淡入 放大 移动等等 首先在 resources 文件夹下添加一个文件夹 将其命名为 anim 然后你可以向其中添加你的动画资源 例如 对于淡入动画 在 an
  • 检查 JQuery 移动复选框是否被选中

    我有一个复选框列表 我想获取每个复选框的状态 名单在这里 div fieldset fieldset div
  • 有没有办法在 Zend Framework 1.5 中执行“INSERT...ON DUPLICATE KEY UPDATE”?

    我想用ON DUPLICATE KEY UPDATE在 Zend Framework 1 5 中 这可能吗 Example INSERT INTO sometable VALUES ON DUPLICATE KEY UPDATE 我在 Ze
  • 实施委托

    我想我正在关注代表团的运作方式 这是我遵循的教程 http www iphonedevsdk com forum iphone sdk tutorials 81489 how why implement delegation pattern
  • 在导入 Google 电子表格之前过滤 CVS

    我在 Google 电子表格中有一个脚本 该脚本从 URL 下载压缩的 CSV 然后将其导入电子表格 实际上 CVS 太大了 我不需要其中的所有数据 我的问题是 如何在将数据导入电子表格之前过滤数据 例如 使用 X 值过滤 A 列 这是我到
  • Java 线程是如何工作的

    我是一名Java学习者 试图理解线程 我期望下面的程序按顺序输出 线程已启动 运行方法 再见 但我按顺序得到输出 再见 线程已启动 Run 方法 这是我的代码 public class RunnableThread public stati
  • 实体框架继承映射 (TPH)

    我正在努力将项目从 nHibernate 转换为实体框架 并陷入映射继承的映射问题 我有以下基类 为简洁起见缩短 public abstract class Status public Guid Id get set public stri