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

时间:2015-02-26 20:36:19

标签: entity-framework-6

我有一个数据库结构,我有一个包含Equipment_IdField_1Field_2列的设备表。我有一个包含字段Equipment_IdDesc的Equipment_Locale表。两个表中的ID都是相同的,这些表之间存在一对一的关系。

我有以下实体:

public class Equipment
{
    public long Id { get; set; }
    public string Description { get; set; }
    public long Field1 { get; set; }
    public long Field2 { get; set; }
}

我有以下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!
    }
}

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

This answer让我对如何在模型构建器中定义映射时如何使用它有一个非常明确的想法。但是,我们一直在这个项目中使用带有EntityTypeConfigurations的文件,只是让模型构建器添加这些配置,我不确定如何在其中一个中设置两个表映射。我怎么能做到这一点?

2 个答案:

答案 0 :(得分:3)

事实证明,我在模型构建器中链接的答案确实非常接近于我需要简单地放入我的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");
        });
    }
}

答案 1 :(得分:-1)

您的父母需要导航属性:

public virtual Equipment_Locale Equipment_Locale { get; set; } 

然后您可以添加到设备配置映射,如:

        HasRequired(p => p.Equipment_Locale )
            .WithMany()
            .HasForeignKey(p => p.Equipment_LocaleId )
            .WillCascadeOnDelete(false);

请点击此处查看关系映射:https://msdn.microsoft.com/en-us/data/jj591620.aspx