我的申请是这样的:
注意多个用户可以跟踪一个产品,因此Product:Track之间的关系是1:n
但是,如果用户当前已登录,则只能 1 跟踪与产品相关联的跟踪,并且在我的列表页面中,我应该显示产品列表及其当前用户的跟踪状态,类似的东西:
因此在普通的SQL中,我可能有这样的查询:
select * from Product as p
left outer join Track as t
on t.ProductId = p.Id and t.UserId = {currentUser.Id}
但是使用NHibernate我发现它实现起来并不容易,目前我有一个 ProductWithTrack 类,它继承自 Product 类并添加 Track 财产:
class ProductWithTrack : Product {
public Track Track { get; set; }
}
我的努力是将此类映射到Product表,与 Product 类相同,但如何计算Track属性的映射,我尝试过:< / p>
请帮助解决此映射问题,谢谢。
答案 0 :(得分:1)
一种方法是基于观察列表页面是数据的报告视图。特别是它结合了有关产品及其跟踪状态的信息。对于报表视图,您无需为所需数据创建显式映射,而是可以使用NHibernate的query capabilities和projections来获取所需的结果。换句话说,ProductWithTrack不需要是它自己的实体。
作为另一种方法,不是让ProductWithTrack从Product继承,而是应该有一个名为TrackedProduct的类:
class TrackedProduct {
public int ID { get; private set; }
public Product Product { get; private set; }
public Track Track { get; private set; }
}
此类表示被跟踪产品的概念,并具有自己的标识。然后,您可以查询此实体以获取所需数据。