fluent NHibernate多对多创建附加表

fluent NHibernate多对多创建附加表,nhibernate,fluent-nhibernate,Nhibernate,Fluent Nhibernate,我有两个表“召回”和“服务”,它们之间需要多对多。 我使用fluent NHibernate映射,但它会创建名为“servicetorecall”的附加表 公共类调用:BaseDomain { 公共虚拟字符串名称{get;set;} 公共虚拟字符串PersonPosition{get;set;} 公共虚拟字符串RecallText{get;set;} 私有ICollection_services=新列表(); 公共虚拟ICollection服务 { 获取{return\u services;}

我有两个表“召回”和“服务”,它们之间需要多对多。 我使用fluent NHibernate映射,但它会创建名为“servicetorecall”的附加表

公共类调用:BaseDomain
{
公共虚拟字符串名称{get;set;}
公共虚拟字符串PersonPosition{get;set;}
公共虚拟字符串RecallText{get;set;}
私有ICollection_services=新列表();
公共虚拟ICollection服务
{
获取{return\u services;}
设置{u services=value;}
} 
}
公共类服务:BaseDomain
{
公共虚拟字符串名称{get;set;}
公共虚拟字符串Url{get;set;}
公共虚拟字符串ImgPath{get;set;}
公共虚拟字符串ShortContent{get;set;}
公共虚拟字符串内容{get;set;}
公共虚拟布尔服务可见{get;set;}
ICollection_recalls=新列表();
公共虚拟ICollection召回
{
获取{return}
设置{u=value;}
} 
}
映射:

 class RecallMappingOverride : IAutoMappingOverride<Recall>
{
    public void Override(AutoMapping<Recall> mapping)
    {
        mapping.Cache.ReadWrite();
        mapping.HasManyToMany(q => q.Services).Table(MappingNames.RECALLS_RELATIONS)
            .ParentKeyColumn(MappingNames.RECALL_ID)
            .ChildKeyColumn(MappingNames.SERVICE_ID).Inverse().Cascade.All();

    }
}


public class ServiceMappingOverride : IAutoMappingOverride<Service>
{
    public void Override(AutoMapping<Service> mapping)
    {
        mapping.Cache.ReadWrite();
        mapping.HasManyToMany(q => q.Recalls).Table(MappingNames.RECALLS_RELATIONS)                  .ParentKeyColumn(MappingNames.SERVICE_ID).ChildKeyColumn(MappingNames.RECALL_ID)
               .Inverse().Cascade.All();

    }
}
class RecCallMappingOverride:IAutoMappingOverride
{
公共无效替代(自动映射)
{
mapping.Cache.ReadWrite();
mapping.HasManyToMany(q=>q.Services).Table(MappingNames.recall\u关系)
.ParentKeyColumn(映射名称.RECALL\u ID)
.ChildKeyColumn(MappingNames.SERVICE_ID).Inverse().Cascade.All();
}
}
公共类ServiceMappingOverride:IAutoMappingOverride
{
公共无效替代(自动映射)
{
mapping.Cache.ReadWrite();
mapping.HasManyToMany(q=>q.RECALL).Table(MappingNames.RECALL\u RELATIONS).ParentKeyColumn(MappingNames.SERVICE\u ID).ChildKeyColumn(MappingNames.RECALL\u ID)
.Inverse().Cascade.All();
}
}
我试图改变瀑布,但这没有帮助。我也对其他实体做了同样的操作,它可以正常工作。它是什么类型的魔法?

如何定义“正确”,您希望实现什么? 我从未听说过任何关于多对多关系的干净解决方案,不使用透视表


[快速浏览映射]:只有一个“manytomy”应该是反向的

 class RecallMappingOverride : IAutoMappingOverride<Recall>
{
    public void Override(AutoMapping<Recall> mapping)
    {
        mapping.Cache.ReadWrite();
        mapping.HasManyToMany(q => q.Services).Table(MappingNames.RECALLS_RELATIONS)
            .ParentKeyColumn(MappingNames.RECALL_ID)
            .ChildKeyColumn(MappingNames.SERVICE_ID).Inverse().Cascade.All();

    }
}


public class ServiceMappingOverride : IAutoMappingOverride<Service>
{
    public void Override(AutoMapping<Service> mapping)
    {
        mapping.Cache.ReadWrite();
        mapping.HasManyToMany(q => q.Recalls).Table(MappingNames.RECALLS_RELATIONS)                  .ParentKeyColumn(MappingNames.SERVICE_ID).ChildKeyColumn(MappingNames.RECALL_ID)
               .Inverse().Cascade.All();

    }
}