仅映射实体框架中的子属性

时间:2016-05-13 16:27:14

标签: c# entity-framework-6

我有两个来自图书馆的课程,即我不能改变:

public class EntityInfo
{
    public Guid Id { get; set; }
    //... some other properties
}
public class MyEntity
{
    public Guid MyEntityId { get; set; }
    public EntityInfo AnotherEntityInfo { get; set; }
    //... some other properties
}

我需要将MyEntity映射到包含以下列的表:

MyEntityId uniqueidentifier,
AnotherEntityId uniqueidentifier -- Here the value of AnotherEntityInfo.Id should be mapped
-- ... some other properties

我不需要映射EntityInfo类型的其他属性,只需要映射Id。所以它就像展平EntityInfo并仅采用其Id。同样,我无法更改类MyEntity和EntityInfo

有没有人知道这样做的方法?

2 个答案:

答案 0 :(得分:1)

您需要为类MyEntity更新ForeignKey,例如:

public class MyEntity
{
    public Guid MyEntityId { get; set; }
    [ForeignKey("AnotherEntityInfo")]
    public int AnotherEntityInfoId { get; set; }
    public EntityInfo AnotherEntityInfo { get; set; }
    //... some other properties
}

你可以在这里阅读:source

答案 1 :(得分:1)

  

同样,我无法更改类MyEntity和EntityInfo

然后Fluent configuration是你唯一的选择。

重写您的DbContext派生类OnModelCreating方法,如下所示:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<MyEntity>()
        .HasRequired(e => e.AnotherEntityInfo)
        .WithMany()
        .Map(c => c.MapKey("AnotherEntityInfoId"));

    base.OnModelCreating(modelBuilder);
}

编辑:我误解了这个问题。如果EntityInfo不是实体且在MyEntity中仅使用 ,则您可以使用以下流畅配置:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    // Ignore all the properties except Id    
    modelBuilder.ComplexType<EntityInfo>()
        .Ignore(e => e.Property1)
        .Ignore(e => e.Property2)
        ...
        .Ignore(e => e.PropertyN);

    base.OnModelCreating(modelBuilder);
}

以上内容将在AnotherEntityInfo_Id表中创建MyEntity列。我没有找到指定列名的方法。