高级TPH映射到旧数据库

时间:2013-11-18 08:11:32

标签: entity-framework orm ef-code-first discriminator

我一直致力于一个项目,我试图将实体框架模型化到现有的FoxPro 2.x数据库,以便使用数据,同时让表格对遗留应用程序可读(有关{{3}的详细信息) })。

我很幸运将DBContext配置到物理数据表,并且我已经设置了大部分映射。遗留数据结构具有Bills表,其中包含唯一的主Id密钥,但可以发布到帐单的所有LineItems都存储在单个Charges表中,而没有简单的主键

我的问题与代码优先EF中的鉴别器映射有关。我在我的数据对象中将表重新创建为TPH,所以我有

public abstract class Posting
{
    public System.DateTime? Post_Date { get; set; }
    public string Bill_Num { get; set; }
    public string Type { get; set; }
    public string Pcode { get; set; }
    public string Pdesc { get; set; }
    public decimal? Custid { get; set; }

    public string Createby { get; set; }
    public System.DateTime? Createdt { get; set; }
    public string Createtm { get; set; }

    public string Modifyby { get; set; }
    public System.DateTime? Modifydt { get; set; }
    public string Modifytm { get; set; }

    public string Linenote { get; set; }
    public decimal? Version { get; set; }

    public string Id { get; set; }
    public string Batch { get; set; }

    public virtual Billing Bill { get; set; }

}

public abstract class Charge : Posting
{

}

public class ServiceLine : Charge
{
    public string Chargeid { get; set; }

    public virtual ICollection<Payment> Payments { get; set; }
}

public class ChargeVoid : Charge
{

}

public abstract class Payment : Posting
{

}

public class PaymentLine : Payment
{
    public string Postid { get; set; }
    public string Svc_Code { get; set; }
    public string Name { get; set; }
    public string Checkno { get; set; }
    public System.DateTime? Checkdate { get; set; }
}

public class PaymentVoid : Payment
{

}

到目前为止我的映射策略是这样的:

public class PostingMap : EntityTypeConfiguration<Posting>
{
    public PostingMap()
    {
        // Primary Key
        this.HasKey(t => new {t.Bill_Num, t.Post_Date, t.Pcode});

        this.Map<Charge>(m => m.Requires("Type").HasValue("C"))
            .ToTable("Charges");
        this.Map<Payment>(m => m.Requires("Type").HasValue("P"))
            .ToTable("Charges");
    }
}

我省略了一些字段和映射类,但这是它的核心。

每条记录都有C / P分类,因此表格中的所有内容都是ChargePayment

每个Posting都与Bill通过Bill_Num外键相关联。

ServiceLine对象仅与ChargeVoid对象(与帐单关联的调整条目和无值信息条目)不同,具有Pcode和{{1}的值}(仅Chargeid标记为Bill_Num ++)。我不知道如何对此进行建模。

01层次结构非常相似。

因此,对于我当前的设置,我Payment没有唯一键Postings,其Charges子集的值为ServiceLines和{ {1}}和Chargeid s的子集以及与Pcode类似的nullPayments ChargesPaymentLines ServiceLines Pcode PaymentVoids之间的Pcode = null也是多对一的。

我有没有办法分配这个复杂的映射,因为我不能简单地区分!null?最重要的是,一旦我设置了继承,EF会处理关键任务,还是我也会遇到问题?

另外,如果有更好的方法可以打破这个对象的继承,我很满意。

0 个答案:

没有答案
相关问题