誰もが助けてくれることを願っています。私はこのサードパーティのデータベースに対して開発する必要があり、私は彼らのくだらないデザインに固執しています。それでも、NHibernateを使用したいので、フープを飛び越えなければなりません。
簡略化すると、「Transportation」テーブルの関係を持つこの「Event」テーブルがあります。トランスポートテーブルには、フィールド「ID」と「FK_EventID」で構成される複合主キーがあります。後者はもちろん、イベントレコードを参照します。各イベントは、輸送テーブル内の1つの別個のレコードを指しているため、実際には1対1の関係になります。どちらのフィールドもGuidsBTWです。
これをマッピングしようとすると、これがクラスの作成方法です(簡単にするために他のデータフィールドは省略します)。
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; }
マッピングファイルで私はこれを試みています(私は多対1を使用していることに注意してください):
<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_TransportationID of:FcoLib.FcoEvent
私の最初の予感は、フィールド名にスペルミスがあるかもしれないということでしたが、それは当てはまりませんでした。だから今、私は完全に困惑していて、どのように進めるかがわかりません。どんな助けでも大歓迎です。Thnx。
アップデート
エラーの原因を見つけたと思います。マッピングエラーだと思っていたので、まだ調べていませんでしたが、クエリエラーのようです。これは、クエリを実行する場所で発生します。
fcoEvents = session.CreateCriteria(typeof(FcoEvent))
.Add(Restrictions.Eq("ID", eventId))
.Add(Restrictions.Eq("FK_TransportationID", transportId))
.List<FcoEvent>();
これについてさらに詳しく調べますが、明らかに別の方法でこれを照会する必要があります...