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

entity-framework-6 - 添加迁移时,序列包含多个匹配元素

当我尝试添加迁移时,我的 DbContext 类中的以下代码会导致错误

我错过了什么?

0 投票
2 回答
7467 浏览

c# - 嵌套 tph 继承成员的 ef-core 负载收集属性

给定以下类结构

查询父母数据以包含有关子女离岸账户的信息的最佳方式是什么?我想出了下面的解决方案,使用 ef-core 的显式加载,但感觉不对。有没有更优雅的解决方案?

0 投票
3 回答
1192 浏览

c# - 抽象基类和空继承类场景中的实体框架 TPH 更改鉴别器列

我有一张桌子:

此表是一组产品、客户或供应商。要对产品进行分组,我需要在 Type 列中使用“P”,要对客户和供应商进行分组,我需要分别使用“C”和“S”。

我想知道我是否可以在这里使用 TPH。就像创建一个包含除 Type 之外的所有字段的抽象类 Group,然后创建空子类 ProductGroup、ClientGroup 和 SupplierGroup,然后将 Type 列配置为具有值“P”、“C”和“S”的鉴别器以映射到它们各自类。

我尝试这样做,但是当 Group 类是抽象的或继承的类为空时,EF 似乎无法正确猜测我的意图。

我的课程如下:

我在 DbContext 中的配置如下:

我认为它应该可以工作,但是使用上面的代码,datacontext.ProductGroups 将返回所有组,而不仅仅是产品组。

我测试并发现如果我的 Group 类是具体的,代码将按我的预期工作,datacontext.ProductGroups 中的组将只是产品组。

我还测试并发现,如果我保留我的 Group 类抽象但移动 ProductGroup 类的字段“Name”,代码也将按预期工作。

我想知道这是一个错误,还是我走错了路。

我想出了这个想法,因为我的老板想要在我们的 web api 中使用一个端点“/productgroups”,我发现在系统中使用一个特定的产品组类会很有趣,而不是使用一个通用组和必须.Where(e => e.Type == "P")到处过滤。我认为在处理传递的对象时,后一种方法不太清楚。

有谁知道如何解决这个问题?我真的需要将我的 Group 课程具体化吗?我不喜欢它,Group 类似乎需要是抽象的,因为实际上我只有填充了 Type 字段的组。

0 投票
1 回答
66 浏览

c# - 实体框架多对多与附加列

我有两节课:

我需要将它们之间的连接保存在一个中。如果我只是简单地将多对多关系放在它们之间,EF 不会意识到实际设置了哪种类型的连接(表行对它们来说是相同的)。所以我必须创建一个带有鉴别器的链接类,如下所示:

但它也不起作用,因为我无法设置链接类型/所以我必须在这里使用 TPH:

使用复合键:

但它也不起作用,因为 EF:

“外键组件 AddressId 不是 ToAddressMessageLink 类型的声明属性”。

如果我将AddressIdMessageId放入派生类中,则无法设置键,因为基类中没有它的组件。

这种情况我该怎么办?

0 投票
0 回答
757 浏览

c# - 在子类中设置鉴别器属性 - 实体框架

我有以下问题。我正在使用实体框架构建 TPH 继承,我需要在子类的现有属性上设置鉴别器列。例子:

所以 - 每个建筑物都需要 BuildingType 属性,而 BuildingType 类具有属性 Category(已经存在)并且可以区分建筑物 TPH 继承。我怎样才能做到这一点?

0 投票
1 回答
67 浏览

entity-framework - 将 TPH 与 Entity Framework 一起使用时,如何使我的 OData 仅公开特定类型?

因为我在我的数据库中支持软删除,所以我选择将我的Thing实体子类型为ActiveThingand DeletedThing...

现在,我的 OData 端点(以前暴露Thing)..我如何让它现在只暴露ActiveThings?

0 投票
0 回答
72 浏览

c# - 无法在实体类型 parameter_manual_input_pattern 上设置字段/属性存储。有关详细信息,请参阅内部异常

当我尝试将新的“参数”对象添加到数据库中时出现此错误,我有:

  • “参数”抽象类
  • “parameter_manual_input_pattern”类继承“parameter”抽象类
  • “parameter_store_pattern”类继承“parameter”抽象类
  • “商店”类

请注意,该类仅继承与模式相关的属性。

0 投票
0 回答
253 浏览

c# - 对 TPH 实体使用 Web API ODATA $expand=*

ODATA$expand=*术语扩展了实体的所有属性。但是在 TPH 模式中,它只扩展了基类引用属性:

执行 ODATA 查询:/odata/Persons?$expand=*只扩展Place.BirthPlace引用属性;不是Customer.Job也不是Employee.Post

但是扩展单个实体的效果与预期的一样好:/odata/Persons(411)?$expand=*扩展Place.BirthPlaceCustomer.Job或者Employee.Post基于实体的类型

TPH场景中如何扩展所有引用的实体?

0 投票
1 回答
221 浏览

asp.net-core - Ef Core TPH & 关系问题

我有这张桌子和班级:

当我想使用 producttype 添加新产品时。

ef 错误:“无法将 'ProductType' 类型的对象转换为 'OnlineStock' 类型。”

我也有这个配置:

0 投票
1 回答
700 浏览

c# - 派生类型首先使用 TPH 在代码中生成自己的 ForeignKey 字段

我正在使用 EF Core 并以逐层表 (TPH) 方法实现继承。我发现,一旦我将层次结构对象添加到我的数据模型中,迁移就会为基表添加一个外键,并且似乎是后代类正在使用的副本。

关系是从Transaction(父母)到TransactionItem(孩子)。

对象层次结构:

  • TransactionItem(基类)
    • 附件
    • 查看
    • 信封
    • 存根

使用 Fluent API 定义关系TransactionTransactionItem使用TransactionItem.TransactionId字段作为外键:

迁移 Up 方法是创建带有 TransactionIdTransactionId2列的基类表 (TPH),每个列都与同一个父表相关:

当我查看 ModelSnapshot.cs 代码时,我看到以下关系特定于继承模型中的对象,该关系使用该列为派生类实体建立外键TransactionId2

我显然错过了一些东西,但无法弄清楚它是什么。我希望能够使用带有 TPH 方法的继承层次结构和从基类表 ( TransactionItem) 到父表 ( ) 的单个外键字段Transaction。感谢您提供的任何帮助。

谢谢!