我有一个包含2个表的DB结构:Order和Lines。一个订单可以有多行。
出于性能方面的考虑,我想为我的生产线使用单独的业务模型,以便处理轻型对象(TPH模式):
public class Order
{
public int id { get; set; }
public ICollection<BasicLine> Lines { get; set; }
}
public abstract class BasicLine
{
public int id { get; set; }
public int idOrder { get; set; }
}
public class LineFull: BasicLine
{
public string property1 { get; set; }
public string property2 { get; set; }
public string property3 { get; set; }
public string property4 { get; set; }
}
public class LineLight: BasicLine
{
public string property4 { get; set; }
}
以及模型配置:
public class BasicLineModelConfiguration : BaseEntityModelConfiguration<BasicLine>
{
public BasicLineModelConfiguration()
{
var discriminator = nameof(BasicLine.LineType);
Map<LineLight>(c => c.Requires(discriminator).HasValue((int)BasicLine.LineType.LineLight));
Map<LineFull>(c => c.Requires(discriminator).HasValue((int)BasicLine.LineType.LineFull));
ToTable("tbl_Line");
}
}
public class LineFullModelConfiguration : BaseEntityModelConfiguration<LineFull>
{
public LineFullModelConfiguration()
{
}
}
public class LineLightModelConfiguration : BaseEntityModelConfiguration<LineLight>
{
public LineLightModelConfiguration()
{
}
}
public class OrderModelConfiguration : BaseEntityModelConfiguration<Order>
{
public OrderModelConfiguration()
{
ToTable("Order");
HasMany(m => m.Lines)
.WithRequired(m => m.Order)
.HasForeignKey(m => m.idOrder);
}
}
我还将其中的4个添加到上下文中。
我需要我的订单具有所有可用属性的多个完整行。我认为使ICollectionion BasicLines达不到我的目标,因为我无法访问LineFull的属性。但是,如果我设置ICollection LineFull,则会出现此错误:
外键组件'idOrder'不是类型的声明属性 'LineFull'。确认尚未明确排除在外 模型,并且它是有效的原始属性
我不希望LineLight具有完整的Order对象作为参考(我希望它非常轻巧)
我认为我的结构存在问题,但是我尝试了很多事情,但实际上没有任何效果。 (鉴别符是否必须作为数据库中的一个字段,我对此并不担心)
感谢您的帮助。