我希望任何人都可以提供帮助。我必须针对这个第三方数据库进行开发,而且我的设计很糟糕。不过,我想使用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>();
我将进一步研究这个,但显然我需要以不同的方式来查询这个...