3
我正在研究一个bug跟踪应用程序。有门票,每张门票都有开门人用户和分配的用户。所以,基本上,我有两个实体,它们之间有两个多对一的关系。其原理是这样的:FluentNHibernate:同一实体之间的多个一对多关系
用户:
public class User
{
public virtual int Id { get; protected set; }
...
public virtual IList<Ticket> OpenedTickets { get; set; }
public virtual IList<Ticket> AssignedTickets { get; set; }
}
票:
public class Ticket
{
public virtual int Id { get; protected set; }
...
[Required]
public virtual User OpenerUser { get; set; }
public virtual User AssignedUser { get; set; }
}
我用FluentNHibernate的自动映射功能。
问题是,无论我设置的关系,在用户的侧面,两个集合总是包含相同的数据。我想Fluent无法判断哪个关系属于哪个末端。
我搜索了一下,但没有发现任何有用的东西。
编辑2:
我富尔德出与史蒂夫的帮助下,我要实现自己的IHasManyConvention。我还发现IHasManyConvention中生成的列名必须与我的IReferenceConvention生成的列名相匹配。随着小调整,我得到它的工作。
我还惊讶地发现,调用方便的ForeignKey.EndsWith("Id")
方法弄乱了整个事情。
虽然史蒂夫的回答本身并不能解决问题,但我非常感谢他指出我正确的方向。
你试过检查NHibernate在底层做了什么吗?我的意思是生成的数据库模式如何以及在测试期间运行了哪些SQL查询。 – Steves 2010-05-06 14:35:05
是的,我做到了。它会产生完全无关的列。 – Venemo 2010-05-06 15:15:53
好的,我终于设法解决了它。更新了我的帖子,并非常感谢您指引我朝着正确的方向发展。 – Venemo 2010-05-06 15:26:13