2012-04-18 55 views
1

我'尝试设置为数据库功能NHibernate映射如下所示:功能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表的列有作为foreignKeys客户的主键,SalesMan,类别。

广告活动有一个与类别一对多的关系

客户有许多与分类

许多关系的客户有许多与业务员一对多的关系,但也与分类

相关

那就是:一位顾客被分配一个推销员对一个特定的类别,因此在CustomerSalesManCategory表一个正确的输入应该完全反映(所有3个ID的人口)

通过我现在使用的映射,可以在SalesMan_id或Category_id上使用NULLS在CustomerSalesManCategory中插入条目,这对我提供的映射是正确的。

但是,我无法弄清楚有关FluentNhibernate做的工作正确done..Single对于客户的SaveOrUpdate CustomerSalesManCategory表中的单一特征。

任何帮助非常appriciated。 这里是我当前的映射:

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

回答

0

三通协会是典型的字典

// in Customer 

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

// in CustomerMap 
HasManyToMany(x => x.CustomerSalesMen) 
    .Table("CustomerSalesManCategory") 
    .AsEntityMap("SalesManId"); 
+0

感谢名单非常为我所用的实体开发工具的免费版本的reply-和类中它创建了一个intermidiate类,这就是CustomerSalesManCategory类。这个类有一个Customer类和一个SalesMan对象,用于启动。我从那里继续。 – Nikos 2012-04-27 13:55:40