代码之家  ›  专栏  ›  技术社区  ›  lesscode

nhibernate:既然session.find()已过时,如何替换它?

  •  1
  • lesscode  · 技术社区  · 15 年前

    我看到session.find(string query,object[]values,itype[]types)已过时,建议改用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的name参数?

    2 回复  |  直到 15 年前
        1
  •  2
  •   mookid8000    15 年前

    你要找的可能是这样的:

    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>();
    
        2
  •  0
  •   lesscode    15 年前

    我想我必须这样做:

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