У меня проблемы с отображением отношения между двумя сущностями, когда в отображении участвуют два столбца.
Я моделирую конечный автомат с двумя типами объектов - State и Transition.Каждый процесс имеет свой собственный конечный автомат, поэтому 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) основывались на ProcessId и порядковом номерегосударство.Например, 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");
}
}
Как мне заставить это работать?