关系在非冬眠状态下是行不通的

本文关键字:行不通 状态 冬眠 关系 | 更新日期: 2023-09-27 18:10:25

我正在使用流利的NHibernate。映射在vb类中完成。朋友表(类)的映射代码是

Map(Function(x) x.FriendID)
References(Function(x) x.UserID_friendID).Column("FriendID")

当这两行代码出现时就会出现脱水错误。如果我删除引用行,则正确插入表中的值。但这样的关系就行不通了。如果remove map(function **)行,则关系工作,但在插入好友表中的frienddid列时仍然为空。请指导我错过了什么或做错了,以实现双方的关系,也保存在朋友表的朋友。我也尝试过。inverse(),但结果相同。

关系在非冬眠状态下是行不通的

我将尝试用c# 来解释(令人惊讶的是,VB并不像我想象的那样容易阅读…)。从上面的映射,我猜你的实体看起来像这样:

Friend Friend   { get; set; } // the property UserID_friendID
int    FriendID { get; set; }

这是ok的NHibernate,但它肯定意味着,这两个属性都针对相同的列"FirendID"。对于读取,我们没有任何问题,两个值都可以填充,但是对于写入,我们可以只传递一个(一列) 。映射(在c#中)应该是这样的:

References(x => x.Friend).Column("FriendID")
Map(x => x.FriendID)
  .Not.Insert()
  .Not.Update()

现在NHibernate将在INSERT或UPDATE时正常工作,并且还提供SELECT的两个值。

注意:在创建过程中,使用上面的映射,我们必须分配Reference Friend,因为这个值是由写操作处理的。