问题标签 [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 投票
1 回答
178 浏览

c# - Entity Framework 6 Table Per Hierarchy 具体包括

当我对每个层次结构进行表映射时,我遇到了 EF6 的问题。我有一个有孩子的Person班级。这两个类几乎相同,除了一个字段:DepartmentId(以及后续链接的组件 Department)。EmployeeManager

我已经为这种事情设置了必要的设置 EF:

现在我的问题是,当我想包括部门时,我不知道该怎么做。有谁能够帮我?或者用文章或其他东西为我指明正确的方向?

0 投票
1 回答
380 浏览

entity-framework - EF6 使用现有 Db 列作为鉴别器

我正在为我的项目使用 Entity Framework 6 Code First。实体具有继承性,因此我遵循 TPH(每个层次结构的表)。我阅读了以下文章和许多其他文章。

他们都没有解释我可以使用映射到基本实体中的属性的现有数据库列作为鉴别器的方式。

根据下面的示例,我得到以下异常

在模型生成期间检测到一个或多个验证错误:

TaskType:名称:类型中的每个属性名称都必须是唯一的。属性名称“TaskType”已定义。

我认为 EF 的自动生成的鉴别器和我的实体映射是冲突的。

是否有可能的方法来指示 EF 不自动生成列并使用实体映射列。如果不是,有什么解释是无法回避的。

和平。

我有以下格式的实体

0 投票
0 回答
24 浏览

entity-framework - 使用现有属性名称添加实体框架核心代码第一个子类

在实体框架中使用 TPH 继承时,以下情况下的最佳/良好做法是什么?:

我有

和一个DbContext

现在我添加

在添加 Sub2 之前,Sub1.Amount 已映射到 Bases 表中的“Amount”列。添加 Sub2 后,Sub1.Amount 映射到“Sub1_Amount”列,Sub2.Amount 映射到“Amount”列。该表中有数据,因此新的“Sub1_Amount”列全部为空。当我尝试运行系统时,我得到

读取属性“Sub1.Amount”的数据库值时发生异常。预期的类型是“System.Int32”,但实际值为 null。

我理解为什么会发生这种情况......但我认为迁移会处理这个问题。

有谁知道如何处理这个?谢谢!

0 投票
0 回答
25 浏览

c# - 如何使用EF代码首先将一个类的对象映射到另一个类TPH

设想

例如,我有一个名为Quiz的抽象类和这个 Quiz 的两个孩子:SingleAnswerQuizMultipleAnswerQuiz。我使用实体框架将此模型映射到每个层次结构的表中。

问题

有没有办法将一种 SingleAnswerQuiz 类型更改为 MultipleAnswerQuiz?我不想删除单个测验并使用已删除测验的数据创建多个。我想在“映射”之后拥有相同的 id。我应该使用鉴别器吗?

0 投票
1 回答
286 浏览

c# - EF6 Table-per-Hierarchy (TPH) - 具有抽象属性的抽象基类不会生成迁移

我为 TPH 设置了一个抽象基类:

..我在其他派生类中继承它:

此设置适用于这些类中的其他继承属性(我已经遗漏的那些),并且这是迄今为止的工作。

这是我在上面显示的“IsFilterRequired”属性的添加,这就是问题 - 我将此抽象属性添加到基类并在派生类中覆盖它。我希望 EF 会选择它并生成迁移以将新列添加到 SQL Server 表中,但它只会创建一个空迁移......这可能有什么问题?谢谢!

0 投票
0 回答
271 浏览

entity-framework-core - EF Core TPH Migration - Derived types have no key defined

EF migrations fails and tells me that the derived types have no key defined.

I'm trying to setup TPH, which should be fairly easy with attributes, but I can't get it to work with separate (fluent-)configuration files. It always reports that the key of the derived types is not defined.

If I define it on the derived types, then it says the key must be defined for the base type.

Entity type configurations:

Model classes:

I can't get rid of this error:

Migration error

Please help me and tell me what I am doing wrong. I can't seem to figure it out...

0 投票
0 回答
18 浏览

entity-framework-6 - 如何从 EF6 的存储过程中读取 TPH 类型?

ObjectContext.Translate<T>不处理T. 有没有办法在 EF6 中轻松地从存储过程中读取 TPH 类型?假设读取整个表记录(以及鉴别器列),添加或更改列中的可维护性“select *”之类的内容。

我真的试图避免创建一个自定义的整体类型,该类型具有表中的所有属性来读取记录,然后打开鉴别器以手动创建和映射子类型。这似乎是 Translate 方法中的一个巨大疏忽。

例如,即使在 EF Core 中,似乎也尝试复制 Translate 方法,但我不确定复制的逻辑是否处理 TPH 类型:https ://github.com/aspnet/EntityFrameworkCore/issues/8127#issuecomment- 330973013 还有一个“Materialize”实现:https ://github.com/aspnet/EntityFrameworkCore/issues/8127#issuecomment-440011796假设其中任何一个支持 TPH,我正在寻找 EF6 的类似实现来替换 Translate 方法.

0 投票
1 回答
343 浏览

entity-framework-core - 如何使用 Entity Framework Core 2 中的每层次表 (TPH) 模式将列保存为 json

我正在尝试使用 table-per-hierarchy 模式存储表,但不是每个派生字段的列,而是将其存储为 json。我只是在 .net 实体框架核心文档中的继承部分做示例,如下所示:

这可以正常工作并将每个属性存储为一列,如下面的屏幕截图所示:

列

我想要实现的是将属性存储为 json 列而不是多个列。它可能看起来像这样:

主要思想是我想将一个类型的继承对象存储到同一个表中,正如 TPH 模式所允许的那样,但使​​用 json 列而不是多个列。

这可以在 EF Core 2.2 中实现吗?

0 投票
1 回答
259 浏览

polymorphism - EF Core - ThenInclude() 与多态元素的集合

我正在尝试从集合的元素中加载属性,该集合本身就是另一个类的属性。集合的元素是多态的,不共享我试图包含的属性,并通过 TPH(Table-per-Hierachry)在 DB 中进行跟踪。当我尝试急切加载它们时,会引发异常,指出基类不包含请求的属性。

我有一个抽象基类Base和两个派生类DerivedADerivedB. Base已像这样为 TPH 配置

此外,我有一个包含和ToBeLoaded的属性的类。我期待 EF Core 能够处理这个问题。我错了吗?public ICollection<Base> Bases {get; set; }DerivedADerivedB

EF Core Docs说我可以像在我的扩展方法中那样使用as或直接转换。ThenInclude()

然后调用context.ToBeLoadedSet.LoadRelated.ToList();以下异常时抛出

我已经尝试使用文档中建议的其他方法来实现这一点,即直接转换和Include(string)方法。我知道这与文档中的示例有些不同,但这是我能找到的最接近我的情况。

这在理论上是否可以使用 Include 接口,还是我应该尝试使用RawSQL

0 投票
2 回答
631 浏览

c# - asp.net core identity 来自 BaseApplicationUser 的多个用户

我正在为我的用户管理系统使用 ASP.NET Core 2.2 Identity。我需要有几种类型的用户......例如,仓库用户和应用程序用户,我创建了一个从身份用户类继承的基类 =>IdentityUser<long>

仓库用户和商店用户继承自BaseApplicationUser创建不同的用户。

我只想为所有这些人准备一张桌子=>AspNetUsers 添加OnModelCreating此代码:

并在 Context 中的 DbSets 中:

我需要为用户创建单独的角色类,比如ApplicationRoleWarehouseApplicationUsers.

有什么问题?

  1. 如何在 asp.net core Identity 中创建不同的用户?( 最好的办法 )
  2. 另一个问题是,当我向 中添加一个字段时ApplicationUser,该字段已成功添加到 中AspNetUsers,但是当我向 中添加一个字段时WarehouseApplicationUsers,EF Core 添加了名为WarehouseApplicationUsersand的新表WarehouseApplicationRoleWarehouseApplicationUserRole然后向WarehouseApplicationUsers表中添加了一个字段……这是什么!

最后,如何继承和构建不同用户的层次结构?非常感谢