使用Entity Framework Core映射抽象基类中的导航属性

时间:2018-04-14 16:46:34

标签: c# entity-framework-core

我有不同的汽车,每个都有特定的汽车类型。 所有汽车都继承自相同的抽象基类CarBase。 CarBase类具有CarType的navigaiton属性。

public abstract CarTypeBase 
{ 
    public string Name { get; set; }
}

public class FordCarType : CarTypeBase 
{

}

public abstract class CarBase {
     public CarTypeBase CarType { get; set; }

     public string GetName() {
           return CarType.Name;
     }      
}

public class Ford : CarBase {

}

使用以下EF映射配置映射福特:

builder.HasOne(o => (FordCarType) o.CarType);

对于CarTypeBase类,我使用Entity Framework的默认Table per Hierarchy(TPH)映射,因此CarTypeBase表具有discriminator列。 而福特表有一个CarTypeBase表的外键。

问题是如果我试图在GetName()方法中访问它,那么Ford CarType导航属性总是为null。如果我使用具体类型FordCarType,则CarType属性将映射到Ford类中。

所以也许我想要实现的是EF无法实现的,或者根本不可能实现?

1 个答案:

答案 0 :(得分:0)

迟到聚会了,但是不应该这样:

public abstract CarTypeBase 
{ 
    public string Name { get; set; }
}

public abstract class CarBase : CarTypeBase  {
        
     public string GetName() {
           return this.Name;
     }      
}

public class Ford : CarBase {

}