0
當映射涉及兩列時,我在映射兩個實體間的關係數據時遇到問題。多列上的Nhibernate映射關係
我使用兩種對象類型 - 狀態和轉換爲狀態機建模。每個進程都有自己的狀態機,因此需要通過ProcessId來標識狀態和轉換。我的實體類是這樣的:
public class State
{
public virtual long Id { get; set; }
public virtual int ProcessId { get; set; }
public virtual int Ordinal { get; set; }
public virtual Process Process { get; set; }
public virtual ICollection<Transition> TransitionsIn { get; set; }
public virtual ICollection<Transition> TransitionsOut { get; set; }
}
public class Transition
{
public virtual long Id { get; set; }
public virtual long ProcessId { get; set; }
public virtual int FromStateNum { get; set; }
public virtual int ToStateNum { get; set; }
public virtual long StateActionId { get; set; }
public virtual Process Process { get; set; }
public virtual StateAction StateAction { get; set; }
public virtual State FromState { get; set; }
public virtual State ToState { get; set; }
}
我需要的導航性能(State.TransitionsIn,State.TransitionsOut,Transition.FromState,Transition.ToState)是基於進程ID和狀態的序號。例如,Transition.FromState應該導航到t.ProcessId = s.ProcessId和t.FromStateNum = s.Ordinal的實體。
我試過以下映射,但它抱怨我使用兩列映射到一個(StateId)。
public class StateMap : ClassMap<State>
{
public StateMap()
{
Id(x => x.Id);
HasMany(s => s.TransitionsIn)
.KeyColumns.Add("ProcessId", "ToStateNum")
.Inverse();
HasMany(s => s.TransitionsOut)
.KeyColumns.Add("ProcessId", "FromStateNum")
.Inverse();
}
}
public class TransitionMap : ClassMap<Transition>
{
public TransitionMap()
{
Id(x => x.Id);
References(t => t.FromState)
.Columns("ProcessId", "Ordinal");
References(t => t.ToState)
.Columns("ProcessId", "Ordinal");
}
}
我該如何得到這個工作?
我已經使用代理鍵以不同的方式解決了問題 - 可能是正確的方法。我沒有機會測試你的答案,但我仍然會爲你頒發榮譽。謝謝。 – 2010-12-16 01:21:43
謝謝,很高興我能以某種方式幫助.. – 2010-12-16 02:14:24