Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# NHibernate 1:n映射到1:1,有限制_C#_.net_Nhibernate_Mapping_Nhibernate Mapping - Fatal编程技术网

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

我的申请表如下:

  • 我有一流的产品
  • 我有用户跟踪这个产品,所以类跟踪
  • 注意:多个用户可以跟踪一个产品,因此product:track之间的关系为1:n

    但是,如果用户当前已登录,则它只能是一个与产品关联的跟踪,并且在我的列表页面中,我应该显示一个产品列表,其中包含当前用户的跟踪状态,类似于:

    • 产品A-2011年1月1日跟踪
    • 产品B-未跟踪
    • 产品C-2010年12月20日跟踪
    因此,在纯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属性的映射,我已经尝试过:

    • 一对多,但曲目不是集合
    • 多对一/一对一,这需要产品表中的外键列,但该列肯定不存在

    请帮助解决这个映射问题,谢谢。

    一种方法是基于观察到列表页面是数据的报告视图。特别是,它结合了有关产品及其跟踪状态的信息。对于报表视图,您不需要为所需的数据创建显式映射,相反,您可以使用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来自哪里?非常感谢。