0

假设我有 4 个表定义如下:

项目:[Project_Id,Project_Name]

供应商:[供应商 ID,供应商名称]

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 对象?

4

1 回答 1

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");

或者您更改数据库结构:

  • 摆脱列 Project_Vendor_Id
  • 在 Payment 表中有列 Project_Id 和 Vendor_Id
于 2012-12-11T19:31:26.023 回答