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

c# - ASP.NET MVC 代码第一个 TPH 不起作用,每个子类创建一个表,为什么?

据我了解,Table Per Hierarchy 首先是 asp.net mvc 代码中的默认值(?)。然而,当我创建一个抽象基类和两个空子类时,迁移想要创建两个单独的表,而不是一个带有鉴别器列的表。

我将两个子类添加到 db 上下文中:

而且我在 OnModelCreating 中什么也不做。

我正在使用 ASP.NET Boilerplate,但据我所知,它不会更改任何会产生此结果的设置。我知道如何强制 TPC,但由于 TPH 是默认设置,我还没有找到任何设置它的方法。有什么办法可以强制TPH吗?还是我的课程遗漏了什么?

这是由此产生的迁移:

0 投票
0 回答
86 浏览

entity-framework-6 - 忽略 TPH 的 EntityFramework 迁移默认值

我有以下迁移定义:

这将在迁移期间将我的 Enum 添加到 Sql-Table 中。我正在使用 TPH,并且此枚举只是指定类型的成员,因此 EF 将自动使其可为空。

问题:

迁移后,所有列的值都为“null”。而不是0。

我希望只有使用此枚举类型的表条目的默认值为 0。

0 投票
1 回答
832 浏览

c# - 为什么 EntityFramework 6 不支持 Discriminator 显式过滤?

下面是一个小的 EF6 程序来演示这个问题。

它的要点是:我们有一个带有显式配置的鉴别器的 TPH 模型(TypeId在这种情况下)。然后我们尝试使用该 TypeId 查询特定的子类型,因为is在我们的假设示例中使用运算符也会返回 SubAAs,而不仅仅是 SubAs。

我显然可以将上面的内容修改为类似的Where(x => x is SubA && !(x is SubAA))内容,但这显然会在我添加 SubAB 后立即中断,并且通过构建exact-filter-linq-to-entities-helper-method 来自动执行此操作显然非常慢,因为该方法有做大量的反思。更不用说上面生成的 SQL 太可怕了,因为 EF/My SQL Provider 没有正确优化它。

现在尝试执行上述操作会导致在NotSupportedException查询具体化时抛出,这基本上表明因为TypeId不是实体的成员,所以我不能使用它进行过滤。

我四处寻找绕过这个问题的方法,但我能找到的最好的东西是一个自动生成Where(x => x is SubA && !(x is SubAA))版本以解决问题的片段,这很可能是我必须做的才能解决这个问题。

所以我的问题是:为什么 EntityFramework 不支持这个?

0 投票
1 回答
41 浏览

c# - TPH EF6.0: Cannot calculate the value of expression

I have 3 classes inherited from an abstract base class:

When I try to get data from table 'PortTaskSteps', the query returns :

Some more details:

The Domain assembly contains the classes mentioned above are referenced by a web project and a web site. And when I debug the function in the web site, everything goes well.However, when I debug the same function in the web project, the results is null.

The Snapshot

For another scene tested in the Web Project: As shown in the Snapshot, I try to get "PortTaskSteps". And the result is null. However, after I uncomment the "textQuery", the result is a list of PortTaskStep.

The Snapshot

I think something is going wrong in webconfig or environment of the Web Project, however, I cannot figure out the point...:(

How can I resolve the problem?

Thanks!

0 投票
0 回答
202 浏览

c# - TPH 继承和 EF 代码优先 - 错误类型的外键约束

我在 TPH 模式中定义了以下内容:

然后,我的实体关系如下:

这个想法是Payments可以是两种类型之一,但只有一种类型具有针对Feature. 当我执行以下操作时:

我收到一个错误:

INSERT 语句与 FOREIGN KEY 约束“FK_dbo.Payment_dbo.Feature_PaymentId”冲突

TPH 继承与特定于类型的 FK 约束不兼容吗?

0 投票
1 回答
148 浏览

asp.net-mvc - 将视图模型映射到使用 TPH 模式创建的模型

我有一个基类和 3 个子类以及具有所有属性的单个视图模型。我想在我的控制器中创建操作以将此视图模型绑定到具体的子类型。

这是我的创建操作不起作用(我收到错误映射类型):

这是自动映射器配置:

这是工作代码,但我怀疑使用它:

0 投票
1 回答
1263 浏览

c# - 如何使用 Entity Framework 6 自定义鉴别器列的名称、长度和值

我尝试将 EF6 与我必须兼容的现有数据库一起使用。该数据库已由 nHibernate 生成,并且一些表使用 table-per-hierarchy (TPH) 继承模型。

鉴别器列被命名Category(而不是Discriminator),并且 SQL 长度为 255(而不是 128)。值也不同于 EF 生成的值。

如何配置 EF 以使用现有列(名称、大小和值)?

我试图定义一个自定义约定:

无论方法中指令的顺序如何,这都会生成一个名为Category但长度为 128的列OnModelCreating。指定类别值似乎会覆盖MaxLength.

0 投票
0 回答
68 浏览

c# - 实体框架中 TPH 继承的映射配置错误?

我尝试使用 Code First 和 FluentApi 在我的域上应用 TPH 继承策略。

我有以下域模型:

并且配置分开:

最后一块 -由员工和教师组成的教师班

最后我得到了一个例外:

附加信息:外键组件“FacultyId”不是“教师”类型的声明属性。验证它没有被明确地从模型中排除,并且它是一个有效的原始属性。

我在这里发现了类似的问题,但情况有些不同。我认为问题是 TeacherConfiguration 继承自 EntityConfiguration 而不是 EmployeeConfiguration。你能帮我找出这里有什么问题吗?

0 投票
0 回答
257 浏览

c# - 实体框架 TPH:如何将外键映射到数据库列

我正在使用 Table-Per-Hierarchy 模式(所有派生类的相同 DB 表),如下所示:

基类:

一些派生类,其中一些具有地址,如下所示:

不幸的是,在创建数据库时,会为每个地址外键创建一个新列,如下所示:Address_Id, Address_Id1...Address_IdN

可以通过使用 Address 向每个类显式添加外键来克服它,如下所示:

但是,此解决方案需要AddressId在类中具有不受欢迎的属性。它不能隐藏声明为私有或受保护,因为表映射属性必须是公共的。

我想过像这样使用流利的API:

或者

但是基类和派生类之间的转换存在问题。现在我被卡住了……</p>

0 投票
1 回答
222 浏览

c# - 如何从 EF 6.1.3 中的特定鉴别器中检索行?

我在我的代码优先模型中使用 TPH 方法,基类是类型WItem,派生是BItem,我只想检索所有 WItems 行,所以我做了这个

但我仍然得到所有的行WHERE [Extent1].[Discriminator] IN (N'BItem',N'WItem')}