假设我有4个表定义如下:
项目:[Project_Id,Project_Name]
供应商:[Vendor_Id,Vendor_Name]
Project_Vendors :[Project_Vendor_Id,Vendor_Id,Project_Id]
付款:[Payment_Id,Project_Vendor_Id,Payment_Amount]
关系应如下:
我可以使用ProjectVendors查找表轻松映射Project和Vendor对象及其关系,其中包含以下内容:
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和Payment对象?
答案 0 :(得分:1)
如果没有映射Project_Vendors表,则不可能直接实现,因为NHibernate必须知道要引用的id的来源。你可以伪造它,但我会反对它。
class ProjectVendorPair
{
public virtual int Id { get; set; }
public virtual Project Project { get; set; }
public virtual Vendor Vendor { get; set; }
}
// in PaymentMap
References(x => x.Owner, "Project_Vendor_Id");
或者您更改数据库结构: