如何使 nhibernate 不结合继承对象的结果?
Posted
技术标签:
【中文标题】如何使 nhibernate 不结合继承对象的结果?【英文标题】:How to make nhibernate not combine results from inherited objects? 【发布时间】:2018-11-08 15:01:07 【问题描述】:我对休眠查询有疑问。 我得到的结果是两张桌子的混合。 我如何告诉 nhibernate 不要合并来自不同表的结果。
这是我的查询:
using (var session = SessionFactory.OpenSession())
using (var transaction = session.BeginTransaction())
timeEntryReportIds = session.Query<XXXX>()
.Where(x => x.SentToServiceLeader == true && x.StartDate < cutoffDate)
.Select(x => x.Id)
.ToList();
transaction.Commit();
我的 XXXX 类映射如下所示:
public class XXXXMapping : ClassMapping<XXXXEntity>
public XXXXMapping()
Table("XXXX");
Property(x => x.X1, c => c.Type<UtcDateTimeType>());
Property(x => x.X2, c => c.Type<UtcDateTimeType>());
Property(x => x.X3, c => c.Index("IX_X3"));
Property(x => x.X4, c => c.Index("IX_X4"));
Property(x => x.X5);
Property(x => x.X6);
我还有一个看起来像这样的:
public class YYYYYMapping : ClassMapping<YYYYYEntity>
...
我的类是这样定义的:
public class XXXXEntity : MwlEntityBase
...
和
public class YYYYEntity : XXXXEntity
...
我遇到的问题是,当我运行查询时,我从 XXXX 和 YYYYY 表中都得到了结果。 我如何告诉 nhibernate 不要那样做!
我来这里之前做了一些研究,它告诉我需要扩展基类,但我无法控制 [MwlEntityBase] 类。我可以控制的其他课程。 我试图将 Classmapping 继承从 ClassMapping 更改为 UnionSubclassMapping 和 JoinedSubclassMapping。但是当我们开始谈论缺少根元素或类似的事情时,它失败了。我认为这是因为我无法更改 MwlEntityBase 类? 也可能是我做错了。
无论如何,我需要帮助以正确的方法来解决这个问题。我什至可以选择一种不正确的方法来解决这个问题,它确实有效:)
【问题讨论】:
【参考方案1】:简短的回答,不要从 XXXX 继承^^ 只需创建一个抽象基类并从该基类派生 XXXX 和 YYYY。
public abstract class BaseEntity : MwlEntityBase
// The common properties for XXXX and YYYY.
public class XXXX : BaseEntity
public class YYYY : BaseEntity
【讨论】:
以上是关于如何使 nhibernate 不结合继承对象的结果?的主要内容,如果未能解决你的问题,请参考以下文章
如何结合 NHibernate Fluent 和 WPF-NHibernate 工具包中的 VmWrapper-Classes?
如何在nHibernate中映射一个继承抽象类并同时实现接口的类?