Nhibernate获得ICriteria的收藏
同事们。我在获取实体时遇到问题。映射:Nhibernate获得ICriteria的收藏,nhibernate,collections,Nhibernate,Collections,同事们。我在获取实体时遇到问题。映射: <?xml version="1.0" encoding="utf-8" ?> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Clients.Core" namespace="Clients.Core.Domains"> <class name="Sales, Clients
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="Clients.Core"
namespace="Clients.Core.Domains">
<class name="Sales, Clients.Core" table='sales'>
<id name="Id" unsaved-value="0">
<column name="id" not-null="true"/>
<generator class="native"/>
</id>
<property name="Guid">
<column name="guid"/>
</property>
<set name="Accounts" table="sales_users" lazy="false">
<key column="sales_id" />
<element column="user_id" type="Int32" />
</set>
</class>
如何通过ICriterion对象执行此操作
非常感谢。var sales=session.CreateCriteria(typeof(sales))
var sales = session.CreateCriteria(typeof(Sales))
.SetFetchMode("Accounts", FetchMode.Join)
.SetResultTransformer(Transformers.DistinctRootEntity)
.List<Sales>();
.SetFetchMode(“帐户”,FetchMode.Join)
.SetResult变压器(变压器距离)
.List();
我认为答案应该是:
public IEnumerable<Sales> GetSalesForUser(int userId)
{
return session.CreateCriteria<Sales>()
.CreateAlias("Accounts", "accounts")
.Add(Restrictions.Eq("accounts.UserId", "userId"))
.List<Sales>();
}
public IEnumerable GetSalesForUser(int userId)
{
返回会话。CreateCriteria()
.CreateAlias(“账户”、“账户”)
.Add(Restrictions.Eq(“accounts.UserId”、“UserId”))
.List();
}
但是我被你的模型弄糊涂了。看起来,客户与销售之间存在多对多关系,但您尚未将其映射为这种关系。我不确定如何过滤int集合(在本例中是HashSet)。你可以试试:
public IEnumerable<Sales> GetSalesForUser(int userId)
{
return session.CreateCriteria<Sales>()
.Add(Restrictions.Eq("Accounts", userId))
.List<Sales>();
}
public IEnumerable GetSalesForUser(int userId)
{
返回会话。CreateCriteria()
.Add(Restrictions.Eq(“Accounts”,userId))
.List();
}
非常感谢。那么“WHERE su.user_id=:N”呢?非常感谢。你说得对。一次销售可能会有很多。我尝试了这个变体,但得到了“NHibernate.QueryException:NHibernate.Criteria.SimpleExpression中的类型不匹配:Accounts预期类型Iesi.Collections.Generic.ISet`1[System.Int32],实际类型System.Int32”。如果要坚持原始设计,应该有一种方法使用Criteria API过滤哈希集。但从长远来看,改进您的域模型会更好。
public IEnumerable<Sales> GetSalesForUser(int userId)
{
return session.CreateCriteria<Sales>()
.CreateAlias("Accounts", "accounts")
.Add(Restrictions.Eq("accounts.UserId", "userId"))
.List<Sales>();
}
public IEnumerable<Sales> GetSalesForUser(int userId)
{
return session.CreateCriteria<Sales>()
.Add(Restrictions.Eq("Accounts", userId))
.List<Sales>();
}