2011-03-31 41 views
0

时,由于升级从NH 3.0到3.1我一直在使用下面的代码有一些麻烦:NHibernate的3.1:MissingMethodException调用LambdaExtensions

criteria = session.CreateCriteria<User>() 
    .Add(SqlExpression.InG<User, int>(user => user.ID, toBeFechted)); // toBefetched is an IList<int> 

这将编译正常,但当运行它我尽快得到一个异常因为我将条件添加到条件。未找到方法::

system.missingMethodException而NHibernate.Criterion.AbstractCriterion NHibernate.Criterion.Restrictions.InG(System.String,了System.Collections.Generic.ICollection 1<**UNKNOWN TYPE**>). at NHibernate.LambdaExtensions.SqlExpression.InG(Expression 1倍的表达,ICollection`1值)

我可以使用QueryOver重建查询而不是Criteria,它可以工作,但这样做需要挖掘大量我没有时间去做的代码。使用NH 3.0我没有问题。

在NH 3.1中有一些变化,或者我有一些奇怪的DLL问题?

+0

我已经看到了这个例外部署一些组件当原始测试在GAC中。我不增加任何更改的版本,你会得到一个MissingMethod异常。不知道在使用nhibernate时会发生这种情况,但无论如何你都应该检查。此外,你应该检查是否使用流利/旧LINQ /旧缓存prividrs,他们都与NH 3.1 – 2011-03-31 13:09:59

+0

编译我不知道如何检查。就我所知,我没有对GAC做过任何事情。我也设法使用.Add(SqlExpression.IsNotNull (x => x.ID)); SqlExpression是LambdaExtensions的一部分,我怀疑这个引用有什么问题,但是看起来没有。 – ds99jove 2011-03-31 14:45:48

+0

我倒退到NH 3.0,一切都开始工作了。 – ds99jove 2011-04-01 06:08:16

回答

1

如果您使用在NH 2.1程序集上构建的Googlecode旧式NH Lambda扩展,您有2个选项; - 您可以降级到3.0,或者您可以下载源代码并针对较晚的二进制文件进行编译。

如果你不想这样做,我对建NH3.1 NHlambdaextensions的副本,其中包括所有传递给你一些报道