0

以下に4つのテーブルを定義します。

Projects:
    Project_Id
    Project_Name

Vendors:
    Vendor_Id
    Vendor_Name

Project_Vendors:
    Project_Vendor_Id
    Project_Id
    Vendor_Id

Project_Vendor_Payments:
    Payment_Id
    Project_Vendor_Id
    Payment_Amount

マッピングを定義することは言うまでもなく、FluentNHibernateで動作するクラスを定義するためにどこから始めればよいのかわかりません。

プロジェクトには多くのベンダーを関連付けることができ、ベンダーはプロジェクトごとに多くの支払いを受け取ることができます。

これを実現する方法について何かアイデアはありますか?

4

1 に答える 1

4

ルックアップ テーブルを参照せず、代わりにエンティティを直接参照する外部キー列を使用することで、この問題を解決しました。

これが私のテーブル構造です:

Projects:
    Project_Id
    Project_Name

Vendors:
    Vendor_Id
    Vendor_Name

Project_Vendors:
    Project_Vendor_Id
    Project_Id
    Vendor_Id

Project_Vendor_Payments:
    Payment_Id
    Project_Id
    Vendor_Id
    Payment_Amount

私のクラスは次のように定義されています。

public class Project
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual IList<Vendor> Vendors { get; set; }
    public virtual IList<VendorPayment> VendorPayments { get; set; }
}

public class Vendor
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
}

public class VendorPayment
{
    public virtual int Id { get; set; }
    public virtual Vendor Vendor { get; set; }
    public virtual float Amount { get; set; }
}

そして私のマッピング:

public ProjectMappings : ClassMap<Project>
{
    public ProjectMappings()
    {
        Table("Projects");
        Id(x => x.Id).Column("Project_Id");
        HasManyToMany(x => x.Vendors).Table("Project_Vendors")
            .ParentKeyColumn("Project_Id")
            .ChildKeyColumn("Vendor_Id")
            .Cascade.AllDeleteOrphan();
        HasMany(x => x.VendorPayments).Table("Project_Vendor_Payments")
            .KeyColumn("Project_Id")
            .Cascade.AllDeleteOrphan();
        Map(x => x.Name).Column("Project_Name")
    }
}

public class VendorMappings : ClassMap<Vendor>
{
    public VendorMappings()
    {
        Table("Vendors");
        Id(x => x.Id).Column("Vendor_Id");
        Map(x => x.Name).Column("Vendor_Name");
    }
}

public class VendorPaymentMappings : ClassMap<VendorPayment>
{
    public VendorPaymentMappings()
    {
        Table("Project_Vendor_Payments");
        Id(x => x.Id).Column("Payment_Id");
        References(x => x.Vendor).Column("Vendor_Id");
        Map(x => x.Amount).Column("Payment_Amount");
    }
}

これは私の質問に対する正確な回答ではなく、問題の単なる解決策です。問題にあったことを正確に行う方法をまだ探しています。

于 2012-11-28T21:51:49.677 に答える