Я надеюсь, что любой может помочь. Я должен развиваться против этой сторонней базы данных, и я немного застрял с их дерьмовым дизайном. Тем не менее, я хочу использовать NHibernate, поэтому мне придется прыгать через обручи.
Упрощенно, есть эта таблица «Событие», которая имеет отношение к таблице «Транспорт». Транспортная таблица имеет составной первичный ключ, состоящий из полей «ID» и «FK_EventID», последний, конечно, ссылается на Event-запись. Каждое событие указывает на одну отдельную запись в транспортной таблице, так что это действительно взаимно-однозначное отношение. Оба поля являются Guids BTW.
Попытка отобразить это, вот как я создал классы (опуская другие поля данных для простоты):
public class FcoEvent : IFcoObject
{
public virtual Guid ID { get; set; }
//public virtual Guid FK_TransportationID { get; set; } //ignore
public virtual FcoTransportation Transportation { get; set; }
А:
[Serializable]
public class FcoTransportation : IFcoObject
{
#region Members
public virtual Guid ID { get; set; }
public virtual Guid FK_EventID { get; set; }
В файлах сопоставления я пытаюсь это сделать (обратите внимание, что я использую многие-к-одному):
<class name="FcoLib.FcoEvent, FcoLib" table="FCO_Event">
<id name="ID" column="ID">
<generator class="guid" />
</id>
<many-to-one name="Transportation" not-found="ignore" cascade="save-update"
class="FcoLib.FcoTransportation, FcoLib">
<column name="FK_TransportationID" />
<column name="ID" />
</many-to-one>
А:
<class name="FcoLib.FcoTransportation, FcoLib" table="FCO_Transportation">
<composite-id>
<key-property name="ID" />
<key-property name="FK_EventID" />
</composite-id>
Когда я пытаюсь запустить это, я получаю следующее сообщение об исключении:
NHibernate.QueryException: не удалось разрешить свойство: FK_TransproductionID из: FcoLib.FcoEvent
Моей первой догадкой было, что в названии поля может быть орфографическая ошибка, но это не сработало. Так что теперь я полностью озадачен и не знаю, как поступить. Любая помощь очень ценится. Thnx.
Обновление
Я думаю, что нашел источник ошибки. Я еще не смотрел там, потому что предположил, что это была ошибка отображения, но, очевидно, это ошибка запроса. Это происходит, когда я делаю запрос:
fcoEvents = session.CreateCriteria(typeof(FcoEvent))
.Add(Restrictions.Eq("ID", eventId))
.Add(Restrictions.Eq("FK_TransportationID", transportId))
.List<FcoEvent>();
Я посмотрю дальше, но, очевидно, мне нужно запросить это по-другому ...