继承在许多方面可能很棘手 - 所以我的建议是“轻松”地处理它。
但是只要在这里做一个典型的 OO 设计就会产生可用的表、结构。也许这样的事情可以为你工作......
public class Document
{
public long ID { get; set; }
public string Name { get; set; }
}
public class OrderLinesDocument : Document
{
public ICollection<OrderLine> OrderLines { get; set; }
}
public interface IVendorDocument
{
ICollection<Vendor> Vendors { get; set; }
}
public class VendorDocument : Document, IVendorDocument
{
public ICollection<Vendor> Vendors { get; set; }
}
public interface ICustomerDocument
{
ICollection<Customer> Customers { get; set; }
}
public class CustomerDocument : Document
{
public ICollection<Customer> Customers { get; set; }
}
public class PurchaseOrder : OrderLinesDocument, IVendorDocument
{
public ICollection<Vendor> Vendors { get; set; }
}
public class Invoice : Document, ICustomerDocument
{
public ICollection<Customer> Customers { get; set; }
}
IMO 最简单的解决方案是使用 TPH(几乎是“原样”)。
但正如我所说,小心使用它——它可能不适用于你的想法——即你需要进行试验,确保 Db 记录看起来是最佳的。
顺便提一句。如果你不知道,你可以这样使用它,忘记发布......
var query1 = db.Documents.OfType<PurchaseOrder>().ToList();
var query2 = db.Documents.OfType<Invoice>().ToList();
var query3 = db.Documents.OfType<CustomerDocument>().ToList();
var query4 = db.Documents.OfType<VendorDocument>().ToList();
var query5 = db.Documents.OfType<OrderLinesDocument>().ToList();
var query6 = db.Documents.OfType<Document>().ToList();
(试试看它是如何工作的)