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
});