问题标签 [table-per-hierarchy]

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 投票
1 回答
387 浏览

sql-server - 使用 Table-per-Hierarchy 映射片段异常(实体框架 4)

如果我有这样的 SQL Server 表:

从技术上讲,这被映射为位置 1..0..* 分数,但使用 LocationId/IsSingleLevel 的 PK,它是位置 1..0..2。

当我将它拖到 EDMX 上时,按预期设置所有内容(抽象实体、从基本实体中删除鉴别器等)。

EF 给出此错误三次(一次用于基本实体,一次用于两个派生实体):

错误 6 错误 3025:从第 2146 行开始映射片段时出现问题:必须为表 LocationScore 的所有关键属性(LocationScore.LocationId、LocationScore.IsSingleLevelScore)指定映射。

我按照这里的例子。

发生错误是因为我将鉴别器作为数据库中 PK 的一部分,并且鉴别器没有映射到模型上,所以我得到了错误。

我不能LocationId作为 PK 中的唯一字段,因为这样一个位置只能有 1 分,我需要它有两个分数(一个单级,一个整体)。

最终结果是我希望能够做到这一点:

其中LocationOverallScoreLocationSingleLevelScore是从LocationScore基础(抽象实体)派生的实体。

TPH 在这里不是正确的设计吗?我的数据库设计错了吗?目的是我不想为不同的分数有 2 个物理表 - 因为表很大,我不想重复列。

我能想到两种可能的解决方法:

1 - 创建一个视图(LocationScore),其中 UNION 是两个表(因此每个 LocationId 将返回 2 行) - 但我仍然认为我不能“TPH”这个。我不想手动执行 JOIN,我想急切加载。

2 - 将 IDENTITY 列添加到 Score,这可以是 PK。

你们能想出另一种解决方案吗?

0 投票
2 回答
761 浏览

entity-framework - EF1:通过传递字符串值使用 .OfType<> 过滤实体类的派生类型

我有一种情况,我试图使用派生的子类过滤 LINQ 选择。

ctx.BaseEntity.OfType<SubClass>()- 这很好用。

但是,我想改为使用字符串值来执行此操作。当我有很多(> 20)子类并且选择不使用 OfType 的实体时,我遇到了性能障碍。我有一个从基类呈现的通用 UI,所以我不知道编译时将返回什么类类型。

所以我想做的是:

  1. 执行一个预计的选择,我只从数据库中返回 SubClassType
  2. 使用此值作为 OfType 执行第二次选择以仅从数据库中选择相关的相关实体(不生成大量联合)

    /li>

但显然这行不通,因为 OfType 需要类型而不是字符串。

关于如何实现这一目标的任何想法?

更新: 作为原始问题的旁注,事实证明,当您投影使用导航属性的查询时 - 它也构建了怪物 SQL,所以我最终使用存储过程来填充我的 ClassType 实体基类 ID。

0 投票
1 回答
925 浏览

c#-4.0 - Entity Framework 4 - TPH Inheritance in Features CTP5 (code first) with "IS NULL" discriminator

Hey guys, I'm trying to create a TPH mapping on a hierarchy where the discriminating clause is the classical "IS NOT NULL" / "IS NULL" case.

Here is the example, database wise:

the idea is to have a class hierarchy like the following one:

I got this schema "working" in the classic xml model, but I really can't find a way to get it working by using the code first approach. This is what I tried...

Do you have any suggestion?

0 投票
2 回答
1857 浏览

inheritance - 如何在 Grails/GORM 中将域类模型对象从一个派生类更改为另一个

给定以下 Grails GORM 域类并使用 table-per-hierarchy 继承:

假设我从数据库中检索到了 A 类的一个实例。我想将它转换为 B 类的实例。grails 惯用的方法是什么?

如果没有 hasMany 关系,我只会删除 A 并创建一个新 B。但我不希望通过大量 Books 并更新它们的 parent_id 字段以指向新 B 的开销。

在后台,我基本上只是想执行 SQL UPDATE 以将数据库字段 parent.class 从 A 更改为 B。那么在 GORM/Grails 中推荐的方法是什么?

0 投票
1 回答
1882 浏览

fluent-nhibernate - Fluent NHibernate - 混合每个子类的表和每个类层次结构的表

给出以下结构,

我将如何使用 Fluent NH 正确映射这些,使用每个子类表和每个类层次结构表的组合?我尝试了自定义 AutomappingConfiguration,但似乎在绕圈子:

在我的调查中,在我看来,在使用 FNH 时,鉴别器的使用是二元选择,而 HBM 能够同时拥有鉴别器列和子类。

0 投票
1 回答
783 浏览

entity-framework-4 - EF4 DB-first:TPH 方法?

我知道这不应该是微不足道的,但到目前为止找不到解决方案......

使用 EF4 DB-First 模型,将 LINQ-to-Entities 与将由 MVC3 应用程序使用的 POCO 一起使用。

我有三个实体CustomerCustomerAdress一个查找CustomerAddressType

如您所见,CustomerAddress有一个FK CustomerAddressTypeId,它标识这是什么类型的地址,即MailingBilling

我想:

  • 有能力做这样的事情:Customer.CustomerAddress.OfType<MailingAddress>为客户收集邮寄地址。
  • 有一个CurrentMailingAddressCurrentBillingAddress属性,它将返回CustomerAddress.OfType<>具有最高StartDateEndDate未来的单个实例。
  • 也可以Address通过Zip属性并将这些属性重构为Complex Type Address

我尝试创建 2 个继承的实体CustomerAddress(假设它是 TPH [table-per-hierarchy] 策略): MailingAddress并且BillingAddressCustomerAddressTypeId作为鉴别器。我在模型设计器中这样做了,当我尝试添加第二个继承实体时,它告诉我具有这些名称的属性已经存在,并且不允许我重命名它们以匹配第一个实体的属性。

任何想法如何做到这一点?请帮我把它搞砸:) 谢谢!!!

0 投票
2 回答
1685 浏览

entity-framework - 实体框架 - 区分多个值

在 Table-Per-Hierachy 场景中,是否可以区分可能值的列表?

例如对于类型Color, DarkColor, LightColor

就像是

糟糕的例子,但希望你能明白!

0 投票
1 回答
1920 浏览

nhibernate - 使用 NHibernate 在没有鉴别器的情况下为每个类层次结构保留一个表?

我有一个接口和一个实现这个接口的类。

现在,使用 NHibernate 2.1.2.GA,我希望使用一个 table-per-class-hierarchy 来映射接口及其实现者,事实上,我不需要鉴别器,因为这个实现者将是唯一持久化的类在这个表中。我已经有大约一年半没有使用 NHibernate 了,而且我在这里遇到了一些记忆空白......

我已经阅读了这个相关的问题和答案,除了我没有使用 FNH。
NHibernate 映射:将层次结构保存到没有鉴别器的单个表

  1. 我想知道该discriminator属性在使用时是否是强制性的subclass

  2. 在这个特定的上下文中,我的 XML 映射应该是什么样子?

感谢您的帮助!

0 投票
1 回答
3119 浏览

inheritance - EF4.1 异常创建具有每层次表继承的数据库

我创建了一个非常简单的项目来演示按层次结构的表继承。在我尝试生成数据库的单元测试中,根据配置,我得到了许多错误之一:

没有Required()方法

提供:

使用Required()方法:

提供:

据我了解,我们不应该在基本类型上定义鉴别器列/属性,但无论哪种方式,无论是否定义列似乎都没有区别:

0 投票
1 回答
1654 浏览

entity-framework - EF:当抽象基和一些具体类型在TPH-table中并且其他类型有自己的表时,我可以混合使用TPH和TPT吗?

首先,这些问题是相似的,但绝对不一样:

我可以在实体框架中混合使用每个层次结构的表和每个类型的表吗?- 指不同的场景。

实体框架:每种类型的表和每个层次结构的表- 还有一种情况,尽管接受了第一种情况的答案,但与它无关 (*)。

(*) 其次,我在实体框架中成功地混合了每个类型的表和每个层次的表,当使用每个实体的表和具有每个层次的表的鉴别器的表映射基本实体时在链条的下游。


我正在尝试映射以下内容:

表:

实体:

在添加 Entity3 映射之前工作。

添加 Entity3 及其映射后,我在编译时收到以下错误:

错误 1 ​​错误 3026:从第 980、986、995 行开始的映射片段出现问题:表 BaseTable 中可能存在数据丢失或键约束违规。在以下情况下,具有密钥 (PK) 的实体将不会往返:(PK 位于“BaseTables”EntitySet 中且实体类型为 [MyNamespace.Entity3])Path\To\My.edmx 981 15 MyAssembly

  • 有没有办法使这项工作?
  • 如果可以破解 edmx 来完成这项工作,我会不会对数据库的每次更新都进行破解?