Nhibernate 未映射Id时按Id列表加载实体的正确方法
我有以下代码Nhibernate 未映射Id时按Id列表加载实体的正确方法,nhibernate,nhibernate-mapping,criteria,nhibernate.search,Nhibernate,Nhibernate Mapping,Criteria,Nhibernate.search,我有以下代码 string idName = builder.IdentifierName; Disjunction disjunction = Restrictions.Disjunction(); IList ids = new ArrayList(entityInfos.Length); foreach (var entityInfo in entityInfos) { ids.Add(entityInfo .Id); } disjunction.Add(Restrictions.
string idName = builder.IdentifierName;
Disjunction disjunction = Restrictions.Disjunction();
IList ids = new ArrayList(entityInfos.Length);
foreach (var entityInfo in entityInfos)
{
ids.Add(entityInfo .Id);
}
disjunction.Add(Restrictions.In(idName, ids));
criteria.Add(disjunction);
criteria.List();
(我还没有写,这是来自NHibernate.Search的简化代码)
idName
的值正确(“Id”
)
在我的映射中,我没有映射到实体属性的Id,它只是DB:
<id column="Id" type="int">
<generator class="native" />
</id>
创建限制和条件的正确方法是什么,这样即使未映射,我也可以通过
Id
进行搜索?请尝试IdEq
。它需要另一个析取
Disjunction idsRestriction = Restrictions.Disjunction();
entityInfo
.Select(x => x.Id)
.ToList()
.ForEach(id => idsRestriction.Add(Restriction.IdEq(id)));
disjunction.Add(idsRestriction);
注意:这将生成类似于(id=1或id=2或id=3…)的内容,而不是(1,2,3)中的(id)
不能百分之百确定它是否有效,但应该有效。您可以使用IdEq,或者使用关键字“id”(全小写)来引用主键
Disjunction idsRestriction = Restrictions.Disjunction();
entityInfo
.Select(x => x.Id)
.ToList()
.ForEach(id => idsRestriction.Add(Restriction.IdEq(id)));
disjunction.Add(idsRestriction);