问题标签 [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.
c# - ASP.NET MVC 代码第一个 TPH 不起作用,每个子类创建一个表,为什么?
据我了解,Table Per Hierarchy 首先是 asp.net mvc 代码中的默认值(?)。然而,当我创建一个抽象基类和两个空子类时,迁移想要创建两个单独的表,而不是一个带有鉴别器列的表。
我将两个子类添加到 db 上下文中:
而且我在 OnModelCreating 中什么也不做。
我正在使用 ASP.NET Boilerplate,但据我所知,它不会更改任何会产生此结果的设置。我知道如何强制 TPC,但由于 TPH 是默认设置,我还没有找到任何设置它的方法。有什么办法可以强制TPH吗?还是我的课程遗漏了什么?
这是由此产生的迁移:
entity-framework-6 - 忽略 TPH 的 EntityFramework 迁移默认值
我有以下迁移定义:
这将在迁移期间将我的 Enum 添加到 Sql-Table 中。我正在使用 TPH,并且此枚举只是指定类型的成员,因此 EF 将自动使其可为空。
问题:
迁移后,所有列的值都为“null”。而不是0。
我希望只有使用此枚举类型的表条目的默认值为 0。
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 不支持这个?
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.
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.
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!
c# - TPH 继承和 EF 代码优先 - 错误类型的外键约束
我在 TPH 模式中定义了以下内容:
然后,我的实体关系如下:
这个想法是Payments
可以是两种类型之一,但只有一种类型具有针对Feature
. 当我执行以下操作时:
我收到一个错误:
INSERT 语句与 FOREIGN KEY 约束“FK_dbo.Payment_dbo.Feature_PaymentId”冲突
TPH 继承与特定于类型的 FK 约束不兼容吗?
asp.net-mvc - 将视图模型映射到使用 TPH 模式创建的模型
我有一个基类和 3 个子类以及具有所有属性的单个视图模型。我想在我的控制器中创建操作以将此视图模型绑定到具体的子类型。
这是我的创建操作不起作用(我收到错误映射类型):
这是自动映射器配置:
这是工作代码,但我怀疑使用它:
c# - 如何使用 Entity Framework 6 自定义鉴别器列的名称、长度和值
我尝试将 EF6 与我必须兼容的现有数据库一起使用。该数据库已由 nHibernate 生成,并且一些表使用 table-per-hierarchy (TPH) 继承模型。
鉴别器列被命名Category
(而不是Discriminator
),并且 SQL 长度为 255(而不是 128)。值也不同于 EF 生成的值。
如何配置 EF 以使用现有列(名称、大小和值)?
我试图定义一个自定义约定:
无论方法中指令的顺序如何,这都会生成一个名为Category
但长度为 128的列OnModelCreating
。指定类别值似乎会覆盖MaxLength
.
c# - 实体框架中 TPH 继承的映射配置错误?
我尝试使用 Code First 和 FluentApi 在我的域上应用 TPH 继承策略。
我有以下域模型:
并且配置分开:
最后一块 -由员工和教师组成的教师班。
最后我得到了一个例外:
附加信息:外键组件“FacultyId”不是“教师”类型的声明属性。验证它没有被明确地从模型中排除,并且它是一个有效的原始属性。
我在这里发现了类似的问题,但情况有些不同。我认为问题是 TeacherConfiguration 继承自 EntityConfiguration 而不是 EmployeeConfiguration。你能帮我找出这里有什么问题吗?
c# - 实体框架 TPH:如何将外键映射到数据库列
我正在使用 Table-Per-Hierarchy 模式(所有派生类的相同 DB 表),如下所示:
基类:
一些派生类,其中一些具有地址,如下所示:
不幸的是,在创建数据库时,会为每个地址外键创建一个新列,如下所示:Address_Id
, Address_Id1
...Address_IdN
可以通过使用 Address 向每个类显式添加外键来克服它,如下所示:
但是,此解决方案需要AddressId
在类中具有不受欢迎的属性。它不能隐藏声明为私有或受保护,因为表映射属性必须是公共的。
我想过像这样使用流利的API:
或者
但是基类和派生类之间的转换存在问题。现在我被卡住了……</p>
c# - 如何从 EF 6.1.3 中的特定鉴别器中检索行?
我在我的代码优先模型中使用 TPH 方法,基类是类型WItem
,派生是BItem
,我只想检索所有 WItems 行,所以我做了这个
但我仍然得到所有的行WHERE [Extent1].[Discriminator] IN (N'BItem',N'WItem')}
?