【问题标题】:Fluent NHibernate Mapping for Table in multiple Many-to-Many Relationships多对多关系中表的流畅 NHibernate 映射
【发布时间】:2012-04-18 14:34:10
【问题描述】:

我正在尝试为如下所示的数据库设置 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 的主键作为外键。

广告系列与类别具有一对多关系

客户与类别具有多对多关系

客户与 SalesMan 具有多对多关系,但也与类别相关

即:为客户分配了特定类别的销售人员,因此 CustomerSalesManCategory 表中的正确条目应完美反映(所有 3 个 id 已填充)

使用我目前拥有的映射,将条目插入到 CustomerSalesManCategory 中,SalesMan_id 或 Category_id 为 NULL- 这对于我提供的映射是正确的。

但是,我无法弄清楚让 FluentNhibernate 正确完成工作的映射。在客户的 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");           
    }
}  

【问题讨论】:

    标签: fluent-nhibernate fluent-nhibernate-mapping


    【解决方案1】:

    三向关联通常是字典

    // in Customer
    
    public IDictionary<SalesMan, Category> asd { get; private set; }
    
    // in CustomerMap
    HasManyToMany(x => x.CustomerSalesMen)
        .Table("CustomerSalesManCategory")
        .AsEntityMap("SalesManId");
    

    【讨论】:

    • 非常感谢您的回复-我使用了实体开发工具的免费版本,在它创建的类中,使用了一个中间类。那是 CustomerSalesManCategory 类。这个类有一个客户类别和一个 SalesMan 对象来初始化。我从那里继续前进。
    猜你喜欢
    • 2016-01-17
    • 2012-07-16
    • 2012-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 2010-11-22
    相关资源
    最近更新 更多