【问题标题】:Reference a child table from another table?从另一个表引用子表?
【发布时间】:2020-01-17 06:26:34
【问题描述】:

所以我在 EntityFramework 6 中使用 TPT(每种类型的表)来创建表层次结构,假设是这样的:

public class Model
{
    public int Id { get; set; }
    public int CommonProperty { get; set; } 
} 

public class ModelA: Model
{
    public string PropertyA { get; set; }
}

public class ModelB: Model
{
    public int PropertyB { get; set; }
}

现在,我需要从自身引用表 ModelA,以便它包含对相同类型实体的引用,如下所示:

public class ModelA: Model
{
    public string PropertyA { get; set; }

    public int ModelAId { get; set;

    public ModelA ModelA;
}

现在,这个引用显然是指 Model 表而不是 ModelA,因为从技术上讲,这个引用没有它自己的 Id。

我该怎么做?

我一直在考虑添加一个名为 ModelAId 的新内部 int 并引用那个,但我不知道是否有更好的解决方案。

【问题讨论】:

    标签: c# sql-server database entity-framework database-design


    【解决方案1】:

    现在,这个引用显然是指模型表而不是 ModelA,因为这在技术上没有它自己的 ID。

    您忘记了(至少根据您给定的示例代码)因为 ModelA 继承自 Model,它现在也有自己的 Id 和 CommonProperty 属性。

    【讨论】:

    • 我明白你的意思。但我需要确保 ModelAId EXCLUSIVELY 引用 ModelA 的实体,而不是 ModelB 的实体。
    • 这是基本的面向对象。当您定义 ModelB:Model 时,它确实与 ModelA 不同。另一个例子,如果你在 ModelB 类中定义一个 ModelB 属性,那么你必须面对 ModelB.ModelB.ModelB.Id 不存在的事实,除非你以正确的顺序实例化了所有东西。
    • 如果你说它是基本的面向对象,那你就不明白这个问题了。它与多态性无关。我在问如何使用 Id 从自身引用表,并确保 Id 不能是引用表 ModelB 的表。
    • 我会更新我的答案,但我这里指的不是多态性。
    猜你喜欢
    • 2021-05-01
    • 1970-01-01
    • 2016-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多