C# NHibernate 1:n映射到1:1,有限制
我的申请表如下:C# NHibernate 1:n映射到1:1,有限制,c#,.net,nhibernate,mapping,nhibernate-mapping,C#,.net,Nhibernate,Mapping,Nhibernate Mapping,我的申请表如下: 我有一流的产品 我有用户跟踪这个产品,所以类跟踪 注意:多个用户可以跟踪一个产品,因此product:track之间的关系为1:n 但是,如果用户当前已登录,则它只能是一个与产品关联的跟踪,并且在我的列表页面中,我应该显示一个产品列表,其中包含当前用户的跟踪状态,类似于: 产品A-2011年1月1日跟踪 产品B-未跟踪 产品C-2010年12月20日跟踪 因此,在纯sql中,我可能会遇到如下查询: select * from Product as p left oute
- 产品A-2011年1月1日跟踪
- 产品B-未跟踪
- 产品C-2010年12月20日跟踪
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属性的映射,我已经尝试过:
- 一对多,但曲目不是集合
- 多对一/一对一,这需要产品表中的外键列,但该列肯定不存在
请帮助解决这个映射问题,谢谢。一种方法是基于观察到列表页面是数据的报告视图。特别是,它结合了有关产品及其跟踪状态的信息。对于报表视图,您不需要为所需的数据创建显式映射,相反,您可以使用NHibernate的函数,并可能获得所需的结果。换句话说,ProductWithTrack不需要是它自己的实体 另一种方法是,不要让ProductWithTrack继承自Product,而应该有一个名为TrackedProduct的类:
class TrackedProduct {
public int ID { get; private set; }
public Product Product { get; private set; }
public Track Track { get; private set; }
}
此类表示跟踪产品的概念,并具有自己的标识。然后可以查询该实体以获得所需的数据。一种方法是基于观察到列表页是数据的报告视图。特别是,它结合了有关产品及其跟踪状态的信息。对于报表视图,您不需要为所需的数据创建显式映射,相反,您可以使用NHibernate的函数,并可能获得所需的结果。换句话说,ProductWithTrack不需要是它自己的实体 另一种方法是,不要让ProductWithTrack继承自Product,而应该有一个名为TrackedProduct的类:
class TrackedProduct {
public int ID { get; private set; }
public Product Product { get; private set; }
public Track Track { get; private set; }
}
此类表示跟踪产品的概念,并具有自己的标识。然后,您可以查询此实体以获得所需的数据。对不起,我仍然感到困惑。。。我尝试过谷歌的“reporting view hibernate”,但没有结果,如果我有一个带有自己ID的类TrackedProduct,那么这个ID来自哪里?非常感谢。对不起,我还是很困惑。。。我尝试过谷歌的“reporting view hibernate”,但没有结果,如果我有一个带有自己ID的类TrackedProduct,那么这个ID来自哪里?非常感谢。