首页 > 解决方案 > EF Core - 映射到共享查找表的最佳方式

问题描述

在我现有的数据库中,我有一个表来存储查找/选择列表值 - 它是多用途的,因此允许我存储可能用于驱动多个组合框等的值 - 我不确定如何在 EF 中对此建模?

表的架构如下:

PKID 整数

值类型 varchar(32)

值键 int

值标题 varchar(64)

显示序列整数

因此,每个 ValueType 都表示一组值。理想情况下,当我在表中显示数据时,我需要从该表中获取值,例如,我将存储一个 PriorityID 值并映射到我的选项列表表中的一组值。对于我可以愉快地使用 .Include 等的东西,我有单独的实体,但是对于这种情况,我看不到如何实现。

有没有办法将记录子集定义为一个单独的实体,所以我可以有优先级/类别等,让它只选择记录子集,或者我将不得不手动创建我的查询并过滤记录我加入这个选项表?

谢谢

编辑:我已经走了 TPH 路线:

public class PickList
{
    [Key]
    public int PKID { get; set; }
    [Column("PLValueType")]
    public string ValueType { get; set; }
    [Column("PLValueKey")]
    public int ValueKey { get; set; }
    [Column("PLValueTitle")]
    public string ValueTitle { get; set; }
    [Column("PLDisplaySequence")]
    public int DisplaySequence { get; set; }
}

然后 :

public class Priority : PickList
{
}

和 :

  modelBuilder.Entity<PickList>()
      .HasDiscriminator<string>("ValueType")
      .HasValue<Priority>("Priority");

但是,如何根据 PriorityFlag 将我的 Priority 实体链接到我的 WorkItem 实体?

public class WorkItem
{
    [Key]
    public int WorkItemID { get; set; }
    public string WorkDescription { get; set; }
    public DateTime RequiredDateTime { get; set; }
    public int PriorityFlag { get; set; }
    public int PriorityIndex { get; set; }
    public string AssignedTo { get; set; }
    public DateTime? CompletionDateTime { get; set; }        
}

标签: c#.netentity-framework-core

解决方案


推荐阅读