问题标签 [tph]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1041 浏览

c# - EF TPH 继承查询

尝试为我正在制作的系统实现一个非常简单的 TPH 设置,1 个基类,2 个继承类。

但是继承的类都属于同一个实体集,所以在我的 ObjectContext 使用循环中,我只能访问基础抽象类。我不太确定如何获得具体类的元素?(我也将其转换为使用 POCO)。

替代文字

然后在我的应用程序中使用实体:

有一个 CelestialBodies 实体集sec,但没有我期望的行星/卫星。

不太确定需要做什么才能访问它们。

谢谢

0 投票
1 回答
411 浏览

c# - EF4 CTP5 如何?将继承的属性映射到相关表中的字段

我使用 Table Per Hierarchy (TPH) 定义了一个名为变量和派生类的实体。基类“变量”包含一组 PropertyValue:

现在,我想派生一个 SpecialVariable 类(或多个),它定义了一些应该映射到 PropertyValues(表)中的条目的 SpecialProperties(例如 HighLimit)。

我的 OnModelCreating 函数目前看起来像这样:

有人可以给我一些提示如何实现这一点,而无需在派生类中编写大量难看的代码。(性能并不那么重要。)

最好的祝福,

克里斯

0 投票
0 回答
282 浏览

entity-framework - 实体框架多级 TPH

假设我有一个地址表,可以由两个不同的表使用。SourceID 确定我们要加入的表。这已使用 TPH 和 SourceID = 1 的条件拆分出来。这很好用。我还希望能够更进一步,拥有另一个具有 2 个条件(SourceID = 1 和 TypeID =2)的实体。我尝试从我的第一个子实体继承,但生成的 SQL 没有考虑这两个条件(第一个派生实体的 SourceID = 1 条件和新派生实体的 TypeID = 2)

有什么方法可以让 TPH 具有多层次的层次结构,以便我根据一组条件有不同的类型?谢谢你的帮助!

0 投票
1 回答
886 浏览

entity-framework - 实体框架中的条件映射 - 使用 TPH 进行 OR 操作

我们有一个类似实体和三个派生实体,Vehicle例如和。这个继承层次是用TPH实现的。CarMotorbikeBicycle

以下是实体映射条件:

  • __disc__ = car车用
  • __disc__ = motorbike摩托车
  • __disc__ = bicycle自行车

    如何使用以下映射条件Vehiclelike派生另一个孩子MotorVehicle

  • __disc__ = car OR motorbike机动车

当我使用TPT具有这种结构时,我会在数据库中这样查看:

我认为 TPH 不需要这种观点。

请注意,我不能像这样更改继承:Vehicle<-- MotorVehicle<-- Car. 不要考虑注入汽车作为汽车和其他孩子的父母,因为汽车和摩托车和自行车已经存在。我只想为所有机动车辆分配一些业务。

0 投票
0 回答
54 浏览

inheritance - 如何将 TPH 模型连接到详细信息页面

我有一个模型如下:

我需要设置一个对 ProductA 和 ProductB 都有效的 details.aspx 页面。所以我打算用这种方法来做。

我相信应该有一种简单的方法可以从子类中获取 Detailvalue 列表。如果你能在这个案子上提供帮助,我将不胜感激。

然后我将使用中继器并使用 Product.DetailValue 作为 itemType 并希望将它放在 aspx 上。

注意:我只是一个初学者,我阅读了很多关于 TPH 的内容,但无法了解如何从产品对象中访问子类的字段。

亲切的问候,

0 投票
1 回答
209 浏览

entity-framework - 用现有的 TPT 声明 TPH(代码优先)

我有几个类继承了 1 个基本抽象类。它通过fluent API 映射到现有数据库(使用Table-Per-Concrete-Type,即未映射到任何表的基本抽象类)。

现在我想在我的代码中添加一些统计信息,对我来说最好的解决方案是对 3-4 个新类使用 TPH 方法。它可能继承也可能不继承与上述相同的类。

但我不知道如何指导 EF 对这 3-4 个类使用 TPH 方法。我是否需要添加带有鉴别器的正确表并且可以使用它?或者我需要通过流畅的 API 以某种方式指定它?

0 投票
0 回答
215 浏览

frameworks - 实体框架映射外键与集合和 TPH 继承

我尝试用 TPH 继承来映射这个简单的模型:

映射是用流利的表示法完成的,如下所示:

如果我让 EF 创建我的数据库,则会在 TestDetail 表中添加两个字段:

但是这两个字段总是 Null 和多余的,因为基础 Dteail 类上的 MasterId 字段做同样的工作?

如果我从数据库中删除这些字段并尝试获取主记录的详细信息,如下所示:

引发异常:当我访问“详细信息”属性时,列名 MasterA_Id、MasterB_Id 无效。

我做错了什么?如何在 TPH 模式下映射此模型,而数据库中没有这两个字段?

谢谢你的帮助。

0 投票
0 回答
530 浏览

entity-framework - EF Code first TPH,类型更改时不更新鉴别器列

我正在学习实体框架并在删除记录时与 TPH 作斗争。我创建了如下 POCO

在我的 DbContext 中,我重写了 OnModelCreating 方法。我在那里有以下代码。

我已经编写了插入和更新事务的代码。插入工作正常。它使用 paymentDetail(作为现金)创建交易。但是当我更新它并将 PaymentDetail 更改为 BankTransfer 时,它会更新 PaymentDetail 中的详细信息(这是一个作为 TPH 创建的平面表)。但它不会更改鉴别器列。它仍然是 Cash,因为它最初是使用 Cash 类型创建的。我通过谷歌搜索发现鉴别器列没有改变。所以我试图删除该行,但它现在给出了以下错误

DELETE 语句与 REFERENCE 约束“FK_dbo.Transaction_dbo.PaymentDetail_PaymentDetail_Id”冲突。冲突发生在数据库“MyRecordsDB”、表“dbo.Transaction”、列“PaymentDetail_Id”中。该语句已终止。

EF代码创建的TransactionTable首先有PaymentDetail_ID可以有allow null,那么谁能告诉我这个问题吗?

在这种情况下使用 TPH 好不好?

以下是从我的 RepositoryClass 修改 Transaction 的方法供参考。

0 投票
2 回答
5525 浏览

entity-framework - 进一步扩展 ASP.NET MVC5 身份系统中的 ApplicationUser 类

我正在为大学创建一个简单的应用程序,学生可以在其中提出某种类型的请求,然后由特定专业的员工处理。

我想使用默认的 MVC5 身份系统并使用 TPH 模式扩展 ApplicationUser 类。所以我给ApplicationUser添加了通用属性:

然后我创建了两个继承 ApplicationUser 的类:

我目前想要的是让两种类型的用户都注册为基本身份,并将两者都保存在一个表中,就像asp.net 上的继承示例一样

正如我所想,在 AccountController 中初始化用户变量就足够了,然后将其作为学生或员工传递给 UserManager。但是在尝试注册为学生后,我得到了这个例外:

我的上下文类:

以及控制器操作的一部分:

我尝试将 ApplicationClass 设置为抽象类,但没有运气。任何帮助,将不胜感激。

更新:问题不在于代码本身。在对模型进行这些更改后,我根本没有删除(或更新)数据库。之后一切正常。

0 投票
1 回答
47 浏览

ef-code-first - EF 5 Code First 使用 TPH 不断重新生成子类之间的交叉表

在 Table-Per-Hierarchy 模式中,以 MM 关系表示两个子类:

每隔一段时间,我就会收到异常“支持上下文的模型已经改变......”,即使我没有对我的模型进行任何更改。

我查看了建议的迁移,它想要做的是删除表Subproject1Subproject2s并替换它with Subproject2Subproject1s

我以前见过它这样做一次,但后来我正在更改模型,所以我很少考虑它。但它似乎有可能成为一个主要问题,如果它偶尔这样做的话,它本身!

谢谢你的帮助!