NHibernate:现在Session.Find()已经过时,我该如何替换它?

时间:2010-09-15 20:16:32

标签: nhibernate

我看到Session.Find(字符串查询,object []值,IType []类型)已过时,建议使用CreateQuery()。SetParameterList()。List()代替。

所以如果我已经有了这样的代码:

var query = "from TABLE t where t.COL1 = ? and t.COL2 = ?";
var vals = new[] { qc1, qc2 };
var types = new[] { ScalarType.String, ScalarType.String };

Session.Find(query, vals, types);

我将传递给SetParameterList的名称参数?

2 个答案:

答案 0 :(得分:2)

您正在寻找的东西可能是这样的:

session.CreateQuery("from Entity t where t.COL1 = :col1 and t.COL2 = :col2")
    .SetString("col1", qc1)
    .SetString("col1", qc2)
    .List<Entity>();

.SetParameterList(...)ICollection为参数,可以使用,例如使用in子句:

session.CreateQuery("from Entity t where t.COL1 in (:cols)")
    .SetParameterList("cols", new [] { "someValue", "anotherValue", "etc"})
    .List<Entity>();

答案 1 :(得分:0)

我想我必须这样做:

var q = Session.CreateQuery(query);
for (int i = 0; i < vals.Length; i++)
{
  q.SetParameter(i, vals[i], types[i]);
}