问题标签 [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.
nhibernate - NHibernate 缺少用于覆盖属性的 SqlParameter
我正在尝试使用 FluentNHibernate AutoMapping 实现按层次结构表的方法。
我有一个基类和三个子类。第三个子类覆盖了基类的几个属性。前两个子类的实例保存得很好,但是当我尝试保存具有覆盖属性的第三个类的实例时,我得到
似乎 NHibernate 没有为被覆盖的属性添加 SqlParamaters,但它尝试设置一个值。
如何解决?也许映射/配置有一些变化?
堆栈跟踪:
entity-framework-5 - 如何首先使用实体框架 5 模型为每个层次结构生成表
我首先使用带有实体框架 5 模型的 Visual Studio 2012。我想使用每个层次结构策略的表来生成我的数据库,但找不到该选项。Entity Designer Database Generation Power Pack 不适用于 Visual Studio 2012,或者我找不到它。
有人建议吗?
sql - 使用 SQL Server 查询检测层次结构中的循环
可能重复:
SQL - 检测父子关系中的循环
我有一个包含 2 列的简单表格,id
并且parentid
:
例如,在上表中,1 是 1 本身的子节点(1->2->3->4->1)。如何发现此类情况?
我需要一个额外的列吗?
entity-framework - 每个层次结构和继承关系的表
我正在使用面向 .Net 4.5 的 Entity Framework 5。对于我的一生,我无法弄清楚我做错了什么,导致在尝试使用 Table Per Hierarchy 和 Navigation 列时导致以下错误:
列名“Game_Category”无效。
列名“Game_Value”无效。
列名“Type_Category”无效。
列名“Type_Value”无效。
这是抽象基类(注意类别和值的复合 PK):
后面是两个不添加额外列的子类......
这是具有 Game 和 SetType 的导航属性的类...
从我的数据上下文...
查找表有一个名为 LookupType 的鉴别器列。我已经阅读了几个关于表/继承的教程。其他两个 - TPT 和 TPC 使用类似构建的对象是小菜一碟。虽然我理解上面的错误 - 它按照惯例正在寻找 FK 列,但我不明白我做错了什么或遗漏了什么导致它查找这些列。我尝试将 ForeignKey 属性放在 GameId 和 TypeId 属性上,但随后我收到有关依赖/主要关系约束的错误,并且我不确定如何将类别指定为附加外键。
我还没有找到一个关于表/继承的教程,在我使用它们时会遍历导航属性。任何帮助将不胜感激,这已经让我发疯了一个多小时。
更新:
我认为问题在于使用 Category 作为 key 的一部分。CardSet 没有用于该查找的“游戏”类别或用于该查找的“设置类型”类别的两个属性。我尝试创建这些属性,但没有奏效。是否可以使用 Fluent API 进行设置?到目前为止,我已经做了大约十几次尝试,但没有任何运气。
c# - Improving my database design using TPH Inheritance
This is my current database design, for the moment just look the student, teacher and classes tables.
I'm trying to convert some tables into news using TPH Inheritance. For example.
Create a new table called Person where contains:
- Id,
- FullName,
- EnrollmentDate (for student),
- Email (for student),
- HireDate (for teacher)
But is there remaining one field called ClassId
, where it's contained in Student
table. At this momment I don't know if should I create a join table to store the ClassId
and PersonId
, or just put the ClassId
into the Person
table. That's my big doubt.
Where do I have to put the ClassId
field?
I have to mention that each student can only be in one class, not many. Teachers can have many classes as they want.
entity-framework - SaveChanges 不适用于 TPH 实体
我将实体框架与通过 T4 (TPH).xaml (VS) 和 SSDLToSQL10.tt (VS) 模板生成 T-SQL 一起使用。我有一张桌子
由于我有 2 种用户类型,因此字段 IsPaid 是鉴别器。我在我的模型中创建了 TPH。通过 .tt 生成的类是
假设我有 id 为 3 的普通用户。我用相同的数据创建了一个新的付费用户 u 并尝试保存它。
没发生什么事。而且我可以从探查器中看到查询根本不使用 IsPaid 列。任何人都可以帮忙吗?
entity-framework - Breeze 是否适用于按层次结构表 (TPH)
我正在尝试将 BreezeJs 插入现有数据结构并在元数据获取中出错。我可以通过将以下内容添加到 CarBones 示例来复制它
然后在上下文中
这足以触发
我不能以这种方式将 TPH 与 Breeze 一起使用吗?然而?
entity-framework-5 - 设置 EF5 和查找表时出现问题
我正在尝试设计一个带有 TPH 查找表的代码优先模型,如下所示:
我希望 Entity Framework 生成一个带有鉴别器的表,它会这样做,如下所示;
在我的上下文 OnModelCreating 覆盖中,我定义了以下内容:
我想按如下方式使用这些查找对象:
我可以创建 Code-First 迁移,但是当我尝试更新数据库时,出现错误
引用关系会导致循环引用是不允许的……
我发现这是由于ON DELETE CASCADE
SQL 脚本生成如下:
我读过我应该把它.WillCascadeOnDelete(false)
放在流利的api中,但我不能让它接受它。希望得到一些帮助...
如何关闭这些关系上的 DELETE CASCADE。我并不打算真的需要删除查找值的能力,而只是想在我的存储库中有一个简单的代码接口。
hibernate - 从一个子类更改为另一个子类的最聪明方法(更新鉴别器值)
背景:我正在为以下类实现持久性:
class Person
abstract class ContactInfo
Email extends ContactInfo
SnailMail extends ContactInfo
每个Person都有一个对ContactInfo对象的引用。(并且一个ContactInfo对象可以在多个Person之间共享。)
在我的用户界面中,我需要让用户编辑联系信息对象,并可能将电子邮件地址替换为蜗牛邮件地址。(如果要替换的联系信息对象在几个人之间共享,则所有这些人都应该更新他们的联系信息。)
然而,据我了解,Hibernate 拒绝更新鉴别器列,因此只需创建一个新的SnailMail对象,为其提供要替换的电子邮件对象的主键值,然后保存它是行不通的。
问题:允许用户将ContactInfo对象从Email更改为SnailMail的最佳方法是什么?
(这些对象是“短暂的”。它是 Web 应用程序的一部分,所有对象都会在每次请求时通过 HQL 重新读取,因此无需担心任何分离的对象。)
到目前为止我的想法:我意识到我可以删除旧对象,插入新对象。如果这是首选方法,我应该 (A) 尝试重用旧的主键值(在这种情况下我需要使用分配的生成器)还是 (B) 让后端为新对象生成新的 ID,并且更新人员联系人引用以指向新对象?
如果 (B) 是要走的路,我可以使用一些 HQL 语句更新引用,还是应该“手动”加载/更新/保存所有受影响的人员对象?
entity-framework - 具有多个程序集的 Entity Framework 5.0 继承
我正在使用 Entity Framework 5.0 和代码优先方法以及由 Table Per Hierarchy 表示的业务对象的继承。
我想有以下结构:
在运行时,当第一次尝试访问 DbContext 时,编译器会抛出一个 InvalidOperationException 说:
抽象类型“CommonObjects.AbstractClass”没有映射的后代,因此无法映射。从模型中删除“CommonObjects.AbstractClass”或将一种或多种派生自“CommonObjects.AbstractClass”的类型添加到模型中。
这种情况甚至可能吗?如果是,我做错了什么?
提前感谢您的回答。
本
附加信息:
也许我应该更具体一点:
我得到了一个包含我的抽象业务对象(仅抽象)的程序集。具体实现(包含逻辑)保存在负责的程序集中,因为它们的逻辑取决于该程序集中的其他类。问题是,我也希望能够将这些具体实现存储在持久层中。但为此,EF 必须知道这些类型才能启用映射。但我不想让持久层依赖于我的业务逻辑层——只有抽象。
这就是我尝试直接从业务对象层将派生对象添加到 DbContext 的原因。
例子:
但是随后抛出了上面的异常。我只是想不出一个好的结构来实现这一点。