Fluent nhibernate 如何在Fluent NHibernate中映射子类map和HasManyToMany

Fluent nhibernate 如何在Fluent NHibernate中映射子类map和HasManyToMany,fluent-nhibernate,nhibernate-mapping,many-to-many,subclass,Fluent Nhibernate,Nhibernate Mapping,Many To Many,Subclass,我的问题是流畅的nhibernate映射多对多关系,它们最终引用了一个不存在的Id public UserMap() { Id(x => x.Id); Map(x => x.Name); Map(x => x.Password); Map(x => x.Confirmed); HasMany(x => x.Nodes).Cascade.SaveUpdate();

我的问题是流畅的nhibernate映射多对多关系,它们最终引用了一个不存在的Id

public UserMap()
    {
        Id(x => x.Id);
        Map(x => x.Name);
        Map(x => x.Password);
        Map(x => x.Confirmed);
        HasMany(x => x.Nodes).Cascade.SaveUpdate();
        HasManyToMany<Node>(x => x.Events).Cascade.SaveUpdate().Table("RSVPs");
    }

public EventMap()
    {

        Map(x => x.Starts);
        Map(x => x.Ends);
        HasManyToMany<User>(x => x.Rsvps).Cascade.SaveUpdate().Table("RSVPs");
    }

public NodeMap() {
        Id(x => x.Id);

        Map(x => x.Title);
        Map(x => x.Body).CustomSqlType("text");
        Map(x => x.CreationDate);
        References(x => x.Author).Cascade.SaveUpdate();
        Map(x => x.Permalink).Unique().Not.Nullable();

    }
public UserMap()
{
Id(x=>x.Id);
Map(x=>x.Name);
映射(x=>x.Password);
Map(x=>x.Confirmed);
HasMany(x=>x.Nodes);
HasManyToMany(x=>x.Events).Cascade.SaveUpdate().Table(“RSVPs”);
}
公共事件地图()
{
Map(x=>x.start);
Map(x=>x.Ends);
HasManyToMany(x=>x.Rsvps).Cascade.SaveUpdate().Table(“Rsvps”);
}
公共节点映射(){
Id(x=>x.Id);
地图(x=>x.Title);
Map(x=>x.Body);
Map(x=>x.CreationDate);
引用(x=>x.Author).Cascade.SaveUpdate();
Map(x=>x.Permalink).Unique().Not.Nullable();
}
这些是我的类-请注意,事件继承自节点:

public class Event : Node//, IEvent
{
    private DateTime _starts = DateTime.MinValue;
    private DateTime _ends = DateTime.MaxValue;
    public virtual IList<User> Rsvps { get; set; }
公共类事件:Node/,IEvent
{
private DateTime _start=DateTime.MinValue;
private DateTime _ends=DateTime.MaxValue;
公共虚拟IList Rsvps{get;set;}
}

问题是,生成的RSVPs表如下所示:

事件id 用户id 节点id

当然,事件表没有ID—只有一个节点ID


当试图保存一个关系时,它会试图保存一个空的事件id,从而产生一个错误。

好的,我应该更了解fluent NHibernate:经过一些尝试和错误后,一切正常。但是,我应该加深我的知识。这是工作代码:

public class UserMap : ClassMap<User>
{
    public UserMap()
    {
        Id(x => x.Id);
        Map(x => x.Name);
        Map(x => x.Password);
        Map(x => x.Confirmed);
        HasMany(x => x.Nodes).Cascade.SaveUpdate();
        HasManyToMany<Node>(x => x.Events)
            .Table("RSVPs")
            .ParentKeyColumn("User_id")
            .ChildKeyColumn("Event_id");
    }
}


(节点和事件类保持不变)

我必须具体说明:

  • 表的名称
  • ParentKeyColumn和ChildKEyColumn的名称(注意,它们在两个类中是相反的)
  • 关于EventMap映射的逆
  • 希望这可以作为一个HasManyToMany/子类映射的示例帮助某人

    public EventMap()
        {
    
            Map(x => x.Starts);
            Map(x => x.Ends);
            HasManyToMany(x => x.Rsvps)
                .Cascade.SaveUpdate()
                .Table("RSVPs")
                .Inverse()
                .ParentKeyColumn("Event_id")
                .ChildKeyColumn("User_id");
        }
    
    public NodeMap() 
    {
            Id(x => x.Id);
    
            Map(x => x.Title);
            Map(x => x.Body).CustomSqlType("text");
            Map(x => x.CreationDate);
            References(x => x.Author).Cascade.SaveUpdate();
            Map(x => x.Permalink).Unique().Not.Nullable();
        }