问题标签 [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.
entity-framework - 无法将表映射设置为 Boolean = False
我正在尝试在 Entity-Framework 中设置继承,我想在 BooleanColumn = True 时设置映射。
我无法这样做。
entity-framework - 具有多重抽象继承的实体框架 TPH
我正在尝试在实体框架(VS 2008 sp1,3.5)中创建一个按层次结构表模型。
我的大多数模型都非常简单,是一种抽象类型,具有多个继承自它的子类型。
然而,我一直在努力应对这个最新的挑战。我有学生想从 PERSONS(abstract) 继承,应该从 PARTIES(abstract) 继承。
每次执行此操作时,我都会收到“错误 2078:EntityType 'Model.PERSONS' 是抽象的,只能使用 IsTypeOf 进行映射。” 我想问题是 PARTIES 已经在实体集中定义为 IsTypeOf 。
那么这甚至可能吗?我可以通过使 PERSONS abstract = false 并分配一个虚假的条件映射来解决它。但这似乎是一个愚蠢的解决方法。
entity-framework - 带有 TPH 的实体框架的多重继承
进一步解决这个问题: Entity Framework TPH with multiple abstract inheritance and VS.2008 sp1 .net 3.5 c#
我决定添加组织和学校。组织(抽象)继承自党,学校(具体)继承自组织。
我得到错误:
我在 EF 的旅途中经常看到 3034 错误。但通常它们与导航属性有关。我没有在继承中看到这样的错误。
这是我的 edmx xml:
.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 中的相同行。映射条件可用于区分这些类型映射到的行。
但是,所有三个对象都存在一个条件。
我没有找到解决这个问题的方法,并且已经花费了太多时间。我们目前正在使用一种解决方法,但希望能解决这个问题,因为这种情况在项目结束时会再出现几次。
任何帮助表示赞赏,如果您需要更多信息,请给我留言或发送电子邮件。
nhibernate - 如何映射继承与属性返回的其他继承?
我有抽象类 Vehicle 和两个派生自:Car 和 ForkLift 的类。
和引擎类:
引擎映射为“每个类层次结构的表”。对于车辆,我想使用相同的模式。
如何映射引擎类并使用该引擎属性派生?
如何通过延迟加载来做到这一点?
java - 使用 DiscriminatorFormula 迁移 Hibernate 数据库是不好的做法吗?
我有一个使用 Hibernate 进行数据持久性的应用程序,上面有 Spring(为了很好的衡量标准)。直到最近,应用程序中还有一个持久类 A:
我已经添加了 A 的一个子类,称为 B:
添加B后,我现在无法加载A。引发了以下异常:
我在B中添加了如下注解和属性,似乎解决了问题。这是解决问题的正确方法吗?
nhibernate - 当子类具有不可为空的字段时,每个层次结构的表映射?
我有一个带有抽象基类和 4-5 个子类的类层次结构。我想使用 NHibernate 的 table-per-class-hierarchy 映射方法将这些映射到单个数据库表,以减少我的查询生成的连接数。
但是,其中一个子类具有其他子类所缺乏的非空属性。这意味着每当我尝试保存其他子类型之一的实体时,我都会收到一条 SQL 错误,指出缺少的字段不能为空。
这是否意味着 table-per-hierarchy 与我的域模型完全不兼容,还是我需要做其他事情?
.net - 实体框架 4 - 继承
我试图了解 EF4 中的继承映射。
我的数据库有两个具有以下结构的表:
人员类别表:
- CategoryID (int) (身份) (PK)
- 类别类型 (nvarchar(50))
人表
- PersonID (int) (身份) (PK)
- CategoryID(来自 PersonCategory 表的 FK)
- 名称 (nvarchar(50))
- 说明 (nvarchar(max))
PersonCategory 表有四个条目,每个条目代表一个类别 - Student、CourseInstructor、Staff 和 Advisor。
通过在线阅读文章,我认为Table Per Hierarchy将是适合这种情况的模型。所以在 EF4 中,我创建了四个实体(Student、CourseInstructor、Staff 和 Advisor),每个实体都继承自 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 中处理这种情况?
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
联想也是这个条件。
但我不明白。所有实体的鉴别器都是唯一的(我已经三重检查),我会认为这是一个有效的场景:
- 县有一个州,用 StateLocationId(Locations 表)表示
- ZipCode 有一个单一的状态,由 StateLocationId(Locations 表)表示
这在 TPH 中无效吗?