问题标签 [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 回答
277 浏览

entity-framework - 无法将表映射设置为 Boolean = False

我正在尝试在 Entity-Framework 中设置继承,我想在 BooleanColumn = True 时设置映射。

我无法这样做。

0 投票
1 回答
2332 浏览

entity-framework - 具有多重抽象继承的实体框架 TPH

我正在尝试在实体框架(VS 2008 sp1,3.5)中创建一个按层次结构表模型。

我的大多数模型都非常简单,是一种抽象类型,具有多个继承自它的子类型。

然而,我一直在努力应对这个最新的挑战。我有学生想从 PERSONS(abstract) 继承,应该从 PARTIES(abstract) 继承。

每次执行此操作时,我都会收到“错误 2078:EntityType 'Model.PERSONS' 是抽象的,只能使用 IsTypeOf 进行映射。” 我想问题是 PARTIES 已经在实体集中定义为 IsTypeOf 。

那么这甚至可能吗?我可以通过使 PERSONS abstract = false 并分配一个虚假的条件映射来解决它。但这似乎是一个愚蠢的解决方法。

0 投票
2 回答
2356 浏览

entity-framework - 带有 TPH 的实体框架的多重继承

进一步解决这个问题: Entity Framework TPH with multiple abstract inheritance and VS.2008 sp1 .net 3.5 c#

我决定添加组织和学校。组织(抽象)继承自党,学校(具体)继承自组织。

我得到错误:

我在 EF 的旅途中经常看到 3034 错误。但通常它们与导航属性有关。我没有在继承中看到这样的错误。

这是我的 edmx xml:

0 投票
1 回答
699 浏览

.net - Table-per-hierarchy 和继承实现问题

我正在将旧的 ASP 应用程序迁移到现代 .NET 版本,以减少我们正在研究的 .NET 4.0 实体框架的开发时间。然而,我们似乎在这个问题上遇到了障碍。

给定的是我们数据库的一小部分:一个表 OBJECT,其中包含汽车列表及其各自的属性。我们还有一个表 OBJECT_OPTIONS,其中包含 OBJECT 中给定汽车的选项、附件和标准设备列表。这三种类型都具有相同的字段,因此存储在同一个表中。ncopt_type 列用于区分不同的列表。可能的值为:“opt”、“acc”和“sta”。表 OBJECT_OPTIONS 通过 ncopt_obj_id 链接到 OBJECT,ncopt_obj_id 表示表 OBJECT 中的唯一汽车 (obj_id)。

我们的目标是为 OBJECT 实体提供链接到不同 OBJECT_OPTIONS 列表的 3 个属性: - 属性 OPTIONS - 属性附件 - 属性 STANDARDEQUIPMENT

我们已经通过继承模型尝试了不同的教程和演练,但没有成功创建可构建的模型。

从技术上讲,我们所做的是:

  • 创建实体 OBJECT
  • 创建实体 OBJECT_OPTIONS,使其抽象
  • 添加实体 OPTION、ACCESSORY 和 STANDARD_EQUIP 均使用基本类型 OBJECT_OPTIONS
  • 在 ncopt_type = '...' 上向所有三个表添加条件
  • 向 OBJECT 添加 3 个导航属性,全部链接到继承实体之一:OPTIONS、ACCESSORIES 和 STANDAARD_EQUIPMENT

在这个设置过程中出现了一堆错误,但我们最终得到了这个:

错误 3032:从第 250、286 行开始映射片段时出现问题:EntityTypes NCO.Model.OPTION、NCO.Model.ACCESSOIRE、NCO.Model.STANDAARD_EQUIP 正在映射到表 OBJECT_OPTIES 中的相同行。映射条件可用于区分这些类型映射到的行。

但是,所有三个对象都存在一个条件。

我没有找到解决这个问题的方法,并且已经花费了太多时间。我们目前正在使用一种解决方法,但希望能解决这个问题,因为这种情况在项目结束时会再出现几次。

任何帮助表示赞赏,如果您需要更多信息,请给我留言或发送电子邮件。

0 投票
2 回答
139 浏览

nhibernate - 如何映射继承与属性返回的其他继承?

我有抽象类 Vehicle 和两个派生自:Car 和 ForkLift 的类。

和引擎类:

引擎映射为“每个类层次结构的表”。对于车辆,我想使用相同的模式。

如何映射引擎类并使用该引擎属性派生?

如何通过延迟加载来做到这一点?

0 投票
1 回答
4016 浏览

java - 使用 DiscriminatorFormula 迁移 Hibernate 数据库是不好的做法吗?

我有一个使用 Hibernate 进行数据持久性的应用程序,上面有 Spring(为了很好的衡量标准)。直到最近,应用程序中还有一个持久类 A:

我已经添加了 A 的一个子类,称为 B:

添加B后,我现在无法加载A。引发了以下异常:

我在B中添加了如下注解和属性,似乎解决了问题。这是解决问题的正确方法吗?

0 投票
1 回答
1312 浏览

entity-framework - 每个层次结构的实体框架表错误 3034

我有一个使用每个层次结构表的实体框架模型。基类是抽象的,有两个派生类。

我想在这两个派生类和另一个类之间创建关联。这些是多对多关系,因此请通过连接表。

添加第一个关联是可以的,但是当我添加第二个时,我得到了这个错误:

错误 3034:从第 1074、1082 行开始映射片段时出现问题:具有可能不同键的两个实体映射到同一行。确保这两个映射片段将 AssociationSet 的两端映射到相应的列。

下面是模型相关部分的图像(LabelImages 和 PresetImages 关联是造成麻烦的):

替代文字

0 投票
1 回答
216 浏览

nhibernate - 当子类具有不可为空的字段时,每个层次结构的表映射?

我有一个带有抽象基类和 4-5 个子类的类层次结构。我想使用 NHibernate 的 table-per-class-hierarchy 映射方法将这些映射到单个数据库表,以减少我的查询生成的连接数。

但是,其中一个子类具有其他子类所缺乏的非空属性。这意味着每当我尝试保存其他子类型之一的实体时,我都会收到一条 SQL 错误,指出缺少的字段不能为空。

这是否意味着 table-per-hierarchy 与我的域模型完全不兼容,还是我需要做其他事情?

0 投票
3 回答
4075 浏览

.net - 实体框架 4 - 继承

我试图了解 EF4 中的继承映射。

我的数据库有两个具有以下结构的表:

人员类别表:

  • CategoryID (int) (身份) (PK)
  • 类别类型 (nvarchar(50))

人表

  • PersonID (int) (身份) (PK)
  • CategoryID(来自 PersonCategory 表的 FK)
  • 名称 (nvarchar(50))
  • 说明 (nvarchar(max))

PersonCategory 表有四个条目,每个条目代表一个类别 - Student、CourseInstructor、Staff 和 A​​dvisor。

通过在线阅读文章,我认为Table Per Hierarchy将是适合这种情况的模型。所以在 EF4 中,我创建了四个实体(Student、CourseInstructor、Staff 和 A​​dvisor),每个实体都继承自 Person 表。然后,我将它们中的每一个映射到 Person 表,并为每个表添加一个条件(例如,对于 Student 实体,CategoryID = 1,对于 Staff 实体,CategoryID = 2)以区别于其他实体。我还从 Person 表中删除了 CategoryID 属性并将其设为抽象类。但是我收到以下错误,因为我从 Person 表中删除了 CategoryId 属性。

错误 3015:从第 101、108、114、120、126、133 行开始映射片段时出现问题:从表 Person (CategoryID) 到表 PersonCategory (CategoryID) 的外键约束“FK_Person_PersonCategory”::映射不足:必须映射外键到一些在概念方面参与外键关联的 AssociationSet 或 EntitySets。

Table Per Hierarchy 是否适合这种情况?如果不是,那么我应该如何在 EF4 中处理这种情况?

0 投票
1 回答
2854 浏览

c# - Entity Framework 4 Table Per Hierarchy - 如何定义儿童的导航属性?

我目前有一个实体框架 4.0 模型和每个类型的表 (TPT),但存在一些性能问题(许多 LOJ 的/CASE 语句),以及两个特定领域区域之间的问题映射(多对 -许多)。

我决定试试TPH。

我有一个名为“位置”的实体,它是抽象的,也是所有其他实体的基础。

然后我有“ Country ”、“ City ”、“ State ”、“ Street ”等,它们都来自 Location。

LocationType ”是判别器

该部分工作正常,但我在尝试为派生类型定义导航属性时遇到问题。

例如,一个“”有一个“国家”,所以我应该能够做到这一点:

但这需要在“State”派生实体上具有一个名为“Country”的导航属性。我该怎么做呢?当我从数据库生成模型时,我有一个表,所有 FK 都指向同一个表中的记录:

替代文字

(注意:我在数据库中手动创建了这些 FK)。

但是 FK 被放置为“位置”实体上的导航,那么我如何将这些导航属性向下移动到派生实体?我无法复制+粘贴导航,也无法“创建新的导航属性”,因为它不会让我定义开始/结束角色。

我们如何做到这一点?

TPH 也不清楚我们是否可以先做模型,或者我们必须从数据库开始,修复模型然后重新生成数据库。我还没有在互联网上找到一个关于如何定义 TPH 儿童导航的好例子。

注意:我不想做代码优先。我当前的解决方案有 EDMX 和纯 POCO 的 TPT,我希望不影响域模型/存储库(如果可能),并且只更新 EF 模型/数据库。

编辑

仍然没有解决方案-但是我尝试先执行模型,然后执行添加-> 新关联,这实际上允许我向派生实体添加导航。但是当我尝试“从模型生成数据库”时,它仍然尝试为“Location_Street”、“Location_Country”等创建表。这几乎就像 TPH 不能先做模型一样。

编辑

这是我目前的模型:

替代文字

我目前得到的验证错误:

错误 1 ​​错误 3002:从第 359 行开始映射片段时出现问题:表位置键 (Locations.LocationId) 的潜在运行时违规:列 (Locations.LocationId) 在概念方面映射到 EntitySet NeighbourhoodZipCode 的属性 (NeighbourhoodZipCode.Neighbourhood.LocationId)但它们不构成 EntitySet 的关键属性(NeighbourhoodZipCode.Neighbourhood.LocationId、NeighbourhoodZipCode.ZipCode.LocationId)。

只是想我会继续编辑这个问题,并编辑关于我目前所处的位置。我开始怀疑带有自引用 FK 的 TPH 是否可能。

编辑

所以我发现了上面的错误,那是因为我错过了 Neighbourhood-ZipCode 多对多的连接表。

添加连接表(并将导航映射到该表)解决了上述错误。

但现在我得到这个错误:

错误 3032:从第 373、382 行开始映射片段时出现问题:条件成员“Locations.StateLocationId”具有重复的条件值。

如果我查看 CSDL,这里是“CountyState”的关联映射(一个州有很多县,一个县有 1 个州):

Condition ColumnName="StateLocationId"是抱怨的,因为ZipCodeState联想也是这个条件。

但我不明白。所有实体的鉴别器都是唯一的(我已经三重检查),我会认为这是一个有效的场景:

  1. 县有一个州,用 StateLocationId(Locations 表)表示
  2. ZipCode 有一个单一的状态,由 StateLocationId(Locations 表)表示

这在 TPH 中无效吗?