Моя проблема заключается в том, что nhibernate свободно отображает отношения «многие ко многим».
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();
}
Это мои классы - обратите внимание, что Event наследует от Node:
public class Event : Node//, IEvent
{
private DateTime _starts = DateTime.MinValue;
private DateTime _ends = DateTime.MaxValue;
public virtual IList<User> Rsvps { get; set; }
}
Проблема в том, что сгенерированная таблица RSVP выглядит следующим образом:
event_id
Идентификатор пользователя
Node_id
Конечно, таблица событий не имеет идентификатора - только Node_id.
При попытке сохранить отношение он попытается сохранить NULL event_id, что приведет к ошибке.