我有一個多對多的分層情況,我只是無法弄清楚如何解決明智的映射。流利的nhibernate多對多與以下多對多映射
我有一個實體事件。這個事件可以有很多事件。一個事件不過是一個價值對象,所以我創建了一個多對多的映射,它工作得很好。
現在到了位,我不能找出...選擇一個事件的每一個事件可以有多種原因(這是一個值對象也一樣)
下面是簡單的數據模型(事件和原因都存儲在SystemValues和具有類型作爲其discriminatorvalue):
(在表IncidentEvent ID是一個代理主鍵,以避免與複合鍵麻煩)
我的映射如下所示(簡化): 事件:
public class IncidentMap : ClassMap<Incident> {
public IncidentMap() {
Table("Incident");
Id(x => x.ID).GeneratedBy.Identity();
HasManyToMany(x => x.Event)
.Table("IncidentEvent")
.ParentKeyColumn("IncidentID")
.ChildKeyColumn("EventID");
}
}
事件(從一般的 'SystemValueMap' subclassmapped):
public class EventMap : SubclassMap<StoryWhere> {
public EventMap() {
DiscriminatorValue((int)SystemValue.Type.Event);
HasManyToMany(x => x.Incident)
.Table("IncidentEvent")
.ParentKeyColumn("IncidentID")
.ChildKeyColumn("EventID");
HasManyToMany(x => x.Cause)
.Table("IncidentEventCause")
.ParentKeyColumn("IncidentEventID")
.ChildKeyColumn("CauseID");
}
}
原因:
public class CauseMap : SubclassMap<Cause> {
public CauseMap() { DiscriminatorValue((int)SystemValue.Type.Cause); }
}
正如你所看到的 '事件' 的映射是一個爛攤子,當然還有它不起作用。當插入完成時,我得到了外鍵約束,因爲NHibernate嘗試將EventID插入到表IncidentEventCause的列IncidentEventID中。我可能需要告訴Nhibernate如何使用IncidentEventID。 我需要讓事件知道它與事件的多對多關係,並且它與事件的關係如下,但我恐怕我不知道如何。
希望有人能指出我正確的方向。
謝謝!我想我的思維方式真的陷入了困境。我根據您的建議重構了所有內容,現在所有功能都可以使用。 – scratchyback 2012-07-18 13:50:41
很高興我能幫上忙 – Firo 2012-07-18 17:59:17