NHibernate 和“匿名”实体
我有这些实体:
public class Parent
{
public int Foo { get; set; }
public Child C { get; set; }
}
public class Child
{
public string Name { get; set; }
}
我有一个查询,它从数据库中获取所有父实体。然后我将它们保存在内存中,并使用 LINQ 查询过滤它们。
我注意到,当我执行数据库查询时,NH 在一个查询中选择所有父实体(当然还填充 Foo 属性),并且对于我使用 LINQ 访问的每个父实体,NH 获取每个子实体的信息。
我怎样才能在一个唯一的数据库中获取我需要的所有信息,并在没有 LINQ 的情况下使用这些数据来生成额外的数据库行程?
我应该使用 AliasToBeanResultTransformer 吗?如果是这样,我必须创建一个 DTO 来存储信息,例如:
public class ParentDTO
{
public int Foo { get; set; }
public string ChildName { get; set; }
}
或者我仍然必须使用 Parent 类吗?
提前致谢
I have these entities:
public class Parent
{
public int Foo { get; set; }
public Child C { get; set; }
}
public class Child
{
public string Name { get; set; }
}
I have query which fetches all Parent entities from the database. Then I keep them in memory, and filter them using LINQ queries.
I have noticed that when I do the DB query, NH selects all the Parent entities in one query (and of course fills the Foo property), and for each Parent I access with LINQ, NH fetches the infos of each Child.
How can I do to fetch all infos I need in one unique DB, and use the data with LINQ without it to generate additional DB trips?
Should I use the AliasToBeanResultTransformer? If so, must I create a DTO which will store the infos, like:
public class ParentDTO
{
public int Foo { get; set; }
public string ChildName { get; set; }
}
or must I still use the Parent class?
Thanks in advance
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以像这样急切加载此查询的子项(使用 QueryOver 语法)
另一种方法是更改 HBM 文件以指示默认情况下急切加载子项。那么您将不需要更改您的查询。
You can eagerly load the children for this query like this (using QueryOver syntax)
An alternative is to change your HBM files to indicate that Child is eagerly loaded by default. Then you won't need to alter your query.
您需要告诉 NHibernate 不要对父实体和子实体之间的关系使用延迟加载。
You need to tell NHibernate not to use lazy loading for the relationship between the Parent and Child entities.