C# NHibernate 3.x:同一个表,三个映射,每个结果三次

C# NHibernate 3.x:同一个表,三个映射,每个结果三次,c#,.net,sql,nhibernate,queryover,C#,.net,Sql,Nhibernate,Queryover,我有三种实体类型:A、B和C 它们被映射到同一个数据库表 B和C继承A 数据库表中有三条记录,分别由A、B和C映射 每当我在配置文件中保持B和C映射时,我都会得到每个实体三次 我尝试删除B和C的映射,然后,我得到了实体的总数:三个 最后,我分析了SQL Server,并将从应用程序启动的查询转换为三个SQL SELECT命令 我怎样才能避免这种情况?或者,我想知道是否有可能将N个类映射到同一个表,而不意味着尝试获取一个实体将导致检索该实体的次数与映射目标表的次数相同 提前感谢。您需要使用继承映射

我有三种实体类型:A、B和C

它们被映射到同一个数据库表

B和C继承A

数据库表中有三条记录,分别由A、B和C映射

每当我在配置文件中保持B和C映射时,我都会得到每个实体三次

我尝试删除B和C的映射,然后,我得到了实体的总数:三个

最后,我分析了SQL Server,并将从应用程序启动的查询转换为三个SQL SELECT命令

我怎样才能避免这种情况?或者,我想知道是否有可能将N个类映射到同一个表,而不意味着尝试获取一个实体将导致检索该实体的次数与映射目标表的次数相同


提前感谢。

您需要使用继承映射策略映射类层次结构,而不是单独映射每个具体类。由于已经将所有三种类型存储在一个表中,所以应该使用表对类映射。请参见和。

您需要使用继承映射策略映射类层次结构,而不是单独映射每个具体类。由于已经将所有三种类型存储在一个表中,所以应该使用表对类映射。请参阅和。

不清楚问题出在哪里。你可以发布一些代码、映射和一些示例,说明返回的内容与期望的内容。然后仔细检查我的文本。1个表由3个实体映射。我有3张唱片。当我尝试将这些记录作为实体检索时,我得到了9个结果(每个实体都是重复的)。谢谢。另一个细节:我试着用queryover和HQL条件做同样的事情。同样的结果。@Mattias仍然值得向我们展示您的数据结构和映射,因为当我们不知道要处理什么时,很难提供帮助。@Vadim,请参阅Jamie Ide的答案。我相信不需要代码,我一直在寻找这种答案。我知道其他一些场景需要代码和示例,但这更多的是因为我缺乏知识-如果我需要诚实的话…-不清楚问题是什么。你可以发布一些代码、映射和一些示例,说明返回的内容与期望的内容。然后仔细检查我的文本。1个表由3个实体映射。我有3张唱片。当我尝试将这些记录作为实体检索时,我得到了9个结果(每个实体都是重复的)。谢谢。另一个细节:我试着用queryover和HQL条件做同样的事情。同样的结果。@Mattias仍然值得向我们展示您的数据结构和映射,因为当我们不知道要处理什么时,很难提供帮助。@Vadim,请参阅Jamie Ide的答案。我相信不需要代码,我一直在寻找这种答案。我知道其他一些场景需要代码和示例,但这更多的是因为我缺乏知识-如果我需要诚实的话…-我会期待这份文档。听起来不错。明天我会记为正确!谢谢。我期待着这份文档。听起来不错。明天我会记为正确!非常感谢。