我希望任何人都可以提供帮助。我必须针对这个第三方数据库进行开发,我有点被他们蹩脚的设计所困扰。不过,我想使用 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
我的第一个预感是字段名称可能存在拼写错误,但这并不成立。所以现在我完全感到困惑,不知道如何进行。任何帮助是极大的赞赏。谢谢。
更新
我想我找到了错误的根源。我还没有看过那里,因为我认为这是一个映射错误,但显然它是一个查询错误。它发生在我进行查询的地方:
fcoEvents = session.CreateCriteria(typeof(FcoEvent))
.Add(Restrictions.Eq("ID", eventId))
.Add(Restrictions.Eq("FK_TransportationID", transportId))
.List<FcoEvent>();
我会进一步研究这个,但显然我需要以不同的方式查询这个......