Fluent nhibernate 如何在Fluent NHibernate中映射子类map和HasManyToMany
我的问题是流畅的nhibernate映射多对多关系,它们最终引用了一个不存在的IdFluent 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();
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");
}
}
(节点和事件类保持不变) 我必须具体说明:
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();
}