0

我正在使用一组预先存在的 FoxPro 表。具体一张表

public class Charges
{
    public string Bill_Num { get; set; }
    public string Type { get; set; }
    public string Chargeid { get; set; }
    public string Postid { get; set; }
    public DateTime Createdt { get; set; }
    public DateTime Modifydt { get; set; }
    public string Createtm { get; set; }
    public string Modifytm { get; set; }
{

似乎是TPH。鉴别器是Type字段(CP),所以我沿着这些路线进行映射:

public abstract class LineItem
{
    public string Bill_num { get; set; }
    public string Type { get; set; }
    public DateTime Createdt { get; set; }
    public DateTime Modifydt { get; set; }
    public string Createtm { get; set; }
    public string Modifytm { get; set; }
}

public class LineItemMap : EntityTypeConfiguration<LineItem>
{
    public LineItemMap()
    {
        this.Map<Charge>(m => m.Requires("Type").HasValue("C"));
        this.Map<Posting>(m => m.Requires("Type").HasValue("P"));

        this.ToTable("Charges");
        this.Property(t => t.Bill_Num).HasColumnName("Bill_Num");
        this.Property(t => t.Type).HasColumnName("Type");
        this.Property(t => t.Createdt).HasColumnName("Createdt");
        this.Property(t => t.Modifydt).HasColumnName("Modifydt");
        this.Property(t => t.Createtm).HasColumnName("Createtm");
        this.Property(t => t.Modifytm).HasColumnName("Modifytm");
    }
}

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

public class ChargeMap : EntityTypeConfiguration<Charge>
{
    public ChargeMap()
    {
        this.HasKey(t => t.Chargeid);

        this.Property(t => t.Chargeid)

        this.ToTable("Charges");
        this.Property(t => t.Chargeid).HasColumnName("Chargeid");
    }
}

public class Posting : LineItem
{
    public string Postid { get; set; }
}

public class PostingMap : EntityTypeConfiguration<Posting>
{
    public PostingMap()
    {
        this.HasKey(t => t.Postid);

        this.Property(t => t.Postid)

        this.ToTable("Charges");
        this.Property(t => t.Postid).HasColumnName("Postid");
    }
}

如果我这样做,LineItem就是缺少一个简单的主键。我认为复合键{ t.Bill_num, t.Createdt, t.Createtm }是唯一的,但我不确定 EF 和/或 FoxPro 提供者是否会喜欢这样。

第二个问题似乎是两者的子类,Charges并且Postings包含无效条目(也称为删除)并且似乎没有分配Chargeid/ Postid,但它确实有一个鉴别器,因此它们将是具有null" "键值的派生类型。

我是否遗漏了什么,或者我的映射/键分配是否正确?

4

0 回答 0