NHibernate针对集合项的带条件查询
我在数据库中有以下配置 我希望能够查询员工或供应商的所有个人。在我所看到的例子中,我没有一个能起作用。代码没有抛出错误,只是没有返回任何记录 这是DTO的NHibernate针对集合项的带条件查询,nhibernate,Nhibernate,我在数据库中有以下配置 我希望能够查询员工或供应商的所有个人。在我所看到的例子中,我没有一个能起作用。代码没有抛出错误,只是没有返回任何记录 这是DTO的 public class Individual { public virtual int Sid { get; set;} public virtual string Id { get; set; } public virtual string FirstName { get; set; } public
public class Individual
{
public virtual int Sid { get; set;}
public virtual string Id { get; set; }
public virtual string FirstName { get; set; }
public virtual string LastName { get; set; }
public virtual string MiddleInitial { get; set; }
public virtual ISet<Company> Companies { get; set; }
}
public class Company
{
private bool _inactive;
public virtual int Sid { get; set; }
public virtual string Name { get; set; }
public virtual IList<Individual> Individuals { get; set; }
public virtual bool Active
{
get { return !_inactive; }
set { _inactive = value; }
}
public virtual bool IsVendor { get; set; }
}
public class IndividualCompany
{
public virtual Individual Individual { get; set; }
public virtual Company Company { get; set; }
public override bool Equals(object obj)
{
if (obj == null)
return false;
IndividualCompany key = obj as IndividualCompany;
if (key == null)
return false;
if (Individual.Sid == key.Individual.Sid && Company.Sid == key.Company.Sid)
return true;
return false;
}
public override int GetHashCode()
{
int hash = 13;
hash = 7 * hash * Individual.Sid.GetHashCode();
hash = 7 * hash * Company.Sid.GetHashCode();
return hash;
}
}
以下是我尝试过的:
public IList<Individual> Get(bool vendorsOnly)
{
try
{
return _session.CreateCriteria<Individual>()
.CreateAlias("Company", "c")
.Add(Restrictions.Eq("c.IsVendor", vendorsOnly))
.List<Individual>();
}
catch (NHibernate.HibernateException)
{
throw;
}
}
public IList Get(仅限布尔供应商)
{
尝试
{
返回_session.CreateCriteria()
.CreateAlias(“公司”、“c”)
.Add(Restrictions.Eq(“c.IsVendor”,仅限卖方))
.List();
}
捕获(NHibernate.hibernateeexception)
{
投掷;
}
}
我没有用FluentNHibernate。非常感谢您的帮助。即使您在查询中引用了联接表的列,nHibernate查询也不会自动与其他表联接 必须明确声明查询应与Company表联接 下面是一个有效的例子。它使用
QueryOver
语法,这是围绕CriteriaAPI的类型安全包装
return _session
.QueryOver<Individual>()
.JoinQueryOver<Company>(i => i.Companies>())
.Where(c => c.IsVendor == vendorsOnly)
.TransformUsing(NHibernate.Transform.Transformers.DistinctRootEntity)
.List();
return\u会话
.QueryOver()
.JoinQueryOver(i=>i.companys>())
.其中(c=>c.IsVendor==vendorsOnly)
.TransformUsing(NHibernate.Transform.Transformers.DistincTroperty)
.List();
即使在查询中引用联接表的列,nHibernate查询也不会自动与其他表联接
必须明确声明查询应与Company表联接
下面是一个有效的例子。它使用QueryOver
语法,这是围绕CriteriaAPI的类型安全包装
return _session
.QueryOver<Individual>()
.JoinQueryOver<Company>(i => i.Companies>())
.Where(c => c.IsVendor == vendorsOnly)
.TransformUsing(NHibernate.Transform.Transformers.DistinctRootEntity)
.List();
return\u会话
.QueryOver()
.JoinQueryOver(i=>i.companys>())
.其中(c=>c.IsVendor==vendorsOnly)
.TransformUsing(NHibernate.Transform.Transformers.DistincTroperty)
.List();
谢谢你,安德鲁!你的解决方案完美无瑕+谢谢你,安德鲁!你的解决方案完美无瑕+1.
return _session
.QueryOver<Individual>()
.JoinQueryOver<Company>(i => i.Companies>())
.Where(c => c.IsVendor == vendorsOnly)
.TransformUsing(NHibernate.Transform.Transformers.DistinctRootEntity)
.List();