如何将两个表映射到 EntityTypeConfiguration 中的一个实体?

Ste*_*rno 3 entity-framework-6

我有一个数据库结构,其中我有一个设备表中的列Equipment_Id,Field_1和Field_2。我有一个 Equipment_Locale 表,其中包含字段Equipment_Id和Desc。两个表中的Id相同,并且这些表之间存在一对一的关系。

我有以下实体:

public class Equipment
{
    public long Id { get; set; }
    public string Description { get; set; }
    public long Field1 { get; set; }
    public long Field2 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我有以下 EntityTypeConfiguration:

public class EquipmentMapping : EntityTypeConfiguration<Equipment>
{
    public EquipmentMapping()
    {
        ToTable("EQUIPMENT");
        HasKey(e => e.Id);
        Property(e => e.Id).HasColumnName("EQUIPMENT_ID");
        Property(e => e.Field1).HasColumnName("FIELD_1");
        Property(e => e.Field2).HasColumnName("FIELD_2");
        // TODO: Okay, now I need to get the description in here!
    }
}
Run Code Online (Sandbox Code Playgroud)

不过,我需要在那里映射描述,它来自 EQUIPMENT_LOCALE 表的 DESC 列。

如果我在 ModelBuilder 中定义映射,这个答案让我对如何使用它有一个非常清晰的想法。但是,我们一直在这个项目中使用带有 EntityTypeConfigurations 的文件,并且只是让模型构建器添加这些配置,我不确定如何在其中一个中设置两个表映射。我怎样才能做到这一点?

Ste*_*rno 5

事实证明,我在 ModelBuilder 中链接的答案真的非常接近我需要简单地放入我的 EntityTypeConfiguration 文件的答案。我之前从未在 EntityTypeConfiguration 中使用过 Map() 所以我有点无能为力。

以下似乎对我有用:

public class EquipmentMapping : EntityTypeConfiguration<Equipment>
{
    public EquipmentMapping()
    {
        HasKey(e => e.Id);
        Property(e => e.Id).HasColumnName("EQUIPMENT_ID");
        Property(e => e.Field1).HasColumnName("FIELD_1");
        Property(e => e.Field2).HasColumnName("FIELD_2");
        Property(e => e.Description).HasColumnName("DESC");

        Map(m =>
        {
            m.Properties(e => new
            {
                e.Id,
                e.Field1,
                e.Field2
            });
            m.ToTable("EQUIPMENT");
        });

        Map(m =>
        {
            m.Properties(e => new
            {
                e.Id,
                e.Description
            });
            m.ToTable("EQUIPMENT_LOCALE");
        });
    }
}
Run Code Online (Sandbox Code Playgroud)