1

以下に示すデータベースに Fluent NHibernate マッピングを設定しようとしています。

 Campaign Table
 Id
 Name

Category Table
Id  
Campaign_id
Name

Customer Table
Id
Name
Phone
...

SalesMan Table
Id
Name
Phone
...

CustomerSalesManCategory Table
Id
Customer_id
SalesMan_id
Category_id

CustomerSalesManCategory テーブルの列は、それぞれ Customer、SalesMan、Category の主キーをforeignKeys として持っています。

キャンペーンは、カテゴリと 1 対多の関係にあります

Customer は、Category と多対多の関係を持っています

Customer は SalesMan と多対多の関係を持っていますが、Category にも関連付けられています

つまり、顧客には特定のカテゴリのセールスマンが割り当てられ、その結果、CustomerSalesManCategory テーブルの正しいエントリはそれを完全に反映する必要があります (3 つの ID がすべて取り込まれます)。

私が現在持っているマッピングでは、エントリが CustomerSalesManCategory に挿入され、SalesMan_id または Category_id に NULLS が挿入されます。これは、提供したマッピングに適しています。

ただし、FluentNhibernate にジョブを正しく実行させるためのマップがわかりません。Customer の SaveOrUpdate の CustomerSalesManCategory テーブルに単一のエントリがあります。

どんな助けも非常に高く評価されています。ここに私の現在のマッピングがあります:

 public class CampaignMap : ClassMap<Campaign>
{
    public CampaignMap()
    {
        Id(x => x.Id);
        Map(x => x.Name);
        Map(x => x.CreationDate);
        HasMany(x => x.CampaignsCategories).Inverse().Cascade.AllDeleteOrphan();
    }
}

  public class CategoryMap : ClassMap<Category>
{
    public CategoryMap()
    {
       Id(x => x.Id);
       Map(x => x.Extension);
       References(x => x.Campaign);
       HasManyToMany(x =>         x.CustomersAssginedInCategory).Inverse().Table("CustomerSalesManCategory");           
    } 
}

public class CustomerMap : ClassMap<Customer>
{
    public CustomerMap()
    {
        Id(x => x.Id);
        Map(x => x.CallingName);
        Map(x => x.OfficialName);
        Map(x => x.Year);
        Map(x => x.Description);
        HasManyToMany(x => x.CustomerCategories).Table("CustomerSalesManCategory");
        HasManyToMany(x => x.CustomerSalesMen).Table("CustomerSalesManCategory");
    }
}

 public class SalesManMap : ClassMap<SalesMan>
{
    public SalesManMap()
    {
        Id(x => x.Id);
       Map(x => x.Name);
       Map(x => x.Email);
       Map(x => x.Phone);
       Map(x => x.Description);
       HasManyToMany(x => x.CustomersAssignedTo).Inverse().Table("CustomerSalesManCategory");           
    }
}  
4

1 に答える 1

0

3方向の関連付けは、通常、辞書です

// in Customer

public IDictionary<SalesMan, Category> asd { get; private set; }

// in CustomerMap
HasManyToMany(x => x.CustomerSalesMen)
    .Table("CustomerSalesManCategory")
    .AsEntityMap("SalesManId");
于 2012-04-26T11:14:19.920 に答える