我希望任何人都可以提供幫助。我必須針對這個第三方數據庫進行開發,而且我的設計很糟糕。不過,我想使用NHibernate,所以我將不得不跳過箍筋。NHibernate:複合鍵多對一映射:無法解析屬性(外鍵組件)
簡化後,有一個與「運輸」表有關係的「事件」表。運輸表具有由字段「ID」和「FK_EventID」組成的主鍵,後者當然指回到事件記錄。每個事件都指向運輸表中的一個不同記錄,所以它確實是一對一的關係。這兩個字段都是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_TransportationID的:FcoLib.FcoEvent
我的第一直覺是,有可能是字段名稱中的拼寫錯誤,但這並不成立。所以現在我完全困惑,不知道如何繼續。任何幫助是極大的讚賞。日Thnx。
更新
我想我找到了錯誤的根源。我還沒有看過,因爲我認爲這是一個映射錯誤,但顯然這是一個查詢錯誤。它發生在那裏我做了查詢:
fcoEvents = session.CreateCriteria(typeof(FcoEvent))
.Add(Restrictions.Eq("ID", eventId))
.Add(Restrictions.Eq("FK_TransportationID", transportId))
.List<FcoEvent>();
我將進一步研究這個,但顯然我需要以不同的方式來查詢這個...