继承TPH EntityFramework和外键数据库优先

时间:2020-02-11 15:45:23

标签: c# entity-framework-6 foreign-keys ef-database-first tph

我有一个包含2个表的DB结构:Order和Lines。一个订单可以有多行。

enter image description here

出于性能方面的考虑,我想为我的生产线使用单独的业务模型,以便处理轻型对象(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对象作为参考(我希望它非常轻巧)

我认为我的结构存在问题,但是我尝试了很多事情,但实际上没有任何效果。 (鉴别符是否必须作为数据库中的一个字段,我对此并不担心)

感谢您的帮助。

0 个答案:

没有答案
相关问题