0
假設我已經4個表定義爲引用一個ID映射表如下:功能NHibernate - 其中從查找表
項目:[PROJECT_ID,PROJECT_NAME]
賣方:[VENDOR_ID,VENDOR_NAME ]
Project_Vendors:[Project_Vendor_Id,VENDOR_ID,PROJECT_ID]
個付款:[Payment_Id,Project_Vendor_Id,支付金額]
的關係應該如下:
- 一個項目可以有關聯的許多廠商
- 供應商可以屬於很多項目
- 許多可以向項目的許多供應商付款(因此支付的唯一支付是項目和供應商)
我可以使用ProjectVendors查找表容易映射項目和供應商對象以及它們之間的關係如下:
public class ProjectMapping : ClassMap<Project>
{
public ProjectMapping()
{
Table("Projects");
Id(x => x.Id).Column("Project_Id").GeneratedBy.TriggerIdentity();
HasManyToMany(x => x.Vendors).Table("Project_Vendors")
.ParentKeyColumn("Project_Id")
.ChildKeyColumn("Vendor_Id")
.Cascade.AllDeleteOrphan();
}
}
我的問題是,如果我的類定義如下:
public class Payment
{
public virtual int? Id { get; set; }
public virtual Project Project { get; set; }
public virtual Vendor Vendor { get; set; }
public virtual double Amount { get; set; }
}
public class Project
{
public virtual int? Id { get; set; }
public virtual string Name { get; set; }
public virtual List<Vendor> Vendors { get; set; }
public virtual List<Payment> VendorPayments { get; set; }
}
我怎樣才能使用查找表Project_Vendors映射我的項目和付款對象?
是的,我有種想通了這。我不介意改變數據庫結構,只不過它會消除數據的完整性並且還會創建少量重複數據。您認爲這種方法在企業級軟件中可以接受嗎?您的數據完整性更依賴於應用程序級別而不是數據庫級別? –
當在鏈接表中定義對「Project_id」和「Vendor_id」的唯一約束並將「Payment.Project_id/Vendor_id」中的外鍵約束定義到鏈接表時,dataintegrity仍然是安全的。它可能更有效率,因爲您在付款時無需前往數據庫以獲取'Project_Vendor_Id' – Firo