如何使 nhibernate 不合并继承对象的结果?
How to make nhibernate not combine results from inherited objects?
我对 nhibernate 查询有疑问。
我得到的结果是两个 table 的混合。
我如何告诉 nhibernate 不要合并来自不同 tables.
的结果
这是我的查询:
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 class 映射如下所示:
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>
...
我的 classes 是这样定义的:
public class XXXXEntity : MwlEntityBase
...
和
public class YYYYEntity : XXXXEntity
...
我遇到的问题是,当我 运行 我的查询时,我从 XXXX 和 YYYYY table 得到结果。
我如何告诉 nhibernate 不要那样做!
我来这里之前做了一些研究,它告诉我我需要扩展基础class,但我无法控制 [MwlEntityBase] class。其他 classes 我可以控制。
我试图将 Classmapping 继承从 ClassMapping 更改为 UnionSubclassMapping 和 JoinedSubclassMapping。但是当开始我们说缺少的根元素或类似的东西时它失败了。我以为这是因为我无法更改 MwlEntityBase class?
也可能是我做错了。
无论如何,我需要帮助以正确的方式解决这个问题。我什至可以接受一个不正确的方法来解决这个问题,它有效:)
简答,不要继承自XXXX^^
只需创建一个抽象基 class 并从该基 class.
派生 XXXX 和 YYYY
public abstract class BaseEntity : MwlEntityBase
{
// The common properties for XXXX and YYYY.
}
public class XXXX : BaseEntity {}
public class YYYY : BaseEntity {}
我对 nhibernate 查询有疑问。 我得到的结果是两个 table 的混合。 我如何告诉 nhibernate 不要合并来自不同 tables.
的结果这是我的查询:
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 class 映射如下所示:
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>
...
我的 classes 是这样定义的:
public class XXXXEntity : MwlEntityBase
...
和
public class YYYYEntity : XXXXEntity
...
我遇到的问题是,当我 运行 我的查询时,我从 XXXX 和 YYYYY table 得到结果。 我如何告诉 nhibernate 不要那样做!
我来这里之前做了一些研究,它告诉我我需要扩展基础class,但我无法控制 [MwlEntityBase] class。其他 classes 我可以控制。 我试图将 Classmapping 继承从 ClassMapping 更改为 UnionSubclassMapping 和 JoinedSubclassMapping。但是当开始我们说缺少的根元素或类似的东西时它失败了。我以为这是因为我无法更改 MwlEntityBase class? 也可能是我做错了。
无论如何,我需要帮助以正确的方式解决这个问题。我什至可以接受一个不正确的方法来解决这个问题,它有效:)
简答,不要继承自XXXX^^ 只需创建一个抽象基 class 并从该基 class.
派生 XXXX 和 YYYYpublic abstract class BaseEntity : MwlEntityBase
{
// The common properties for XXXX and YYYY.
}
public class XXXX : BaseEntity {}
public class YYYY : BaseEntity {}