Asp.net mvc 如何使用nhibernate聚合所有信息

Asp.net mvc 如何使用nhibernate聚合所有信息,asp.net-mvc,asp.net-mvc-4,nhibernate,fluent-nhibernate,fluent-nhibernate-mapping,Asp.net Mvc,Asp.net Mvc 4,Nhibernate,Fluent Nhibernate,Fluent Nhibernate Mapping,看看下面的课程: public class Produt { public virtual int id { get; set; } public virtual string name { get; set; } [ScriptIgnore] public virtual Unit unit { get; set; } } public class Unit { public virtual int id { get; set; } publ

看看下面的课程:

public class Produt
{
    public virtual int id { get; set; }
    public virtual string name { get; set; }

    [ScriptIgnore]
    public virtual Unit unit { get; set; }
}

public class Unit
{
    public virtual int id { get; set; }
    public virtual string name { get; set; }
    public virtual IList<Produt> produts { get; set; }
}
和nhibernate?如何做?需要帮忙吗

另外,[ScriptIgnore]是因为我在循环引用方面有问题。我的课程不仅仅是这些。这只是一个示例。

只需获取产品即可 最简单的方法就是获取产品列表。产品已经包含了您需要的所有信息,因为它引用了单元

// NOTE: This fetches ALL products.  You really should limit this.
var products = session.Query<Product>();
foreach (var product in products)
    Console.WriteLine("Product: {0}, Unit: {1}", product.Name, product.Unit.Name);
将结果展平 如果出于某种原因需要展平的结果对象,而不必通过挖掘嵌套对象来获取所需的数据,则可以使用“投影”来完成此操作。对于LINQ,这看起来像:

var productInfos = session.Query<Product>().Select(x => new
{
    ProductId = x.Id,
    ProductName = x.Name,
    UnitName = x.Unit.Name
});
var-productInfos=session.Query()。选择(x=>new
{
ProductId=x.Id,
ProductName=x.Name,
UnitName=x.Unit.Name
});
如果需要限制NHibernate返回的列,这也很有用——例如,如果其中一列包含要避免获取的巨大blob


除了LINQ之外,NHibernate还有几种不同的执行查询的方法:原生SQL、HQL、Criteria和QueryOver。对于条件或查询版本,将在执行这些类型的查询时提供帮助。有关在条件查询中使用AliasToBean的示例,请参见此相关问题:

这可能很有用,谢谢您的回答jbl,但当我这样做时:yourNhSession.CreateSQLQuery(“从produt中选择produt.id,produt.name,unit.name,unit WHERE produt.idUnit=unit.id”).List()。。。将返回我的产品列表。。。对象“单位”的信息在哪里?NHibernate只能提供一种类型(而不是两种)的列表。因此,您必须创建一些ProductUnit类型,它可以包含这两种类型的数据。。。好的,非常感谢您。。。
// NOTE: This fetches ALL products.  You really should limit this.
var products = session.Query<Product>();
foreach (var product in products)
    Console.WriteLine("Product: {0}, Unit: {1}", product.Name, product.Unit.Name);
var products = session.Query<Product>().Fetch(x => x.Unit);
var productInfos = session.Query<Product>().Select(x => new
{
    ProductId = x.Id,
    ProductName = x.Name,
    UnitName = x.Unit.Name
});