以下に示すデータベースに 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");
}
}