我在VS2015的.net 4.5目标项目的NuGet中使用NHibernate 3.3.1.4000。NHibernate AliasToBean变压器抛出然后QueryOver别名是一个私人字段
我有两个环境中,第一ENV1一个视窗8.1 VS2012和VS2015, 和第二个ENV2与窗10和仅VS2015。
正如在QueryOver docs指出,别名可以是:
在QueryOver,别名使用的是空的变量分配。变量可以在任何地方声明(但在运行时应该为空)。然后编译器可以根据变量检查语法是否正确使用,但是在运行时不会对变量进行评估(它只是用作别名的占位符)。
QueryOver中的每个Lambda表达式函数都有一个对应的重载,以允许使用别名,并且.JoinAlias函数可以使用别名遍历关联而不创建子查询。
所以这意味着具有空值的专用字段应该很好地作为别名工作。
但是......并不那么容易。
我有下面的例子:
public void Test()
{
TestDto testDtoAlias = null;
var users = GetSession()
.QueryOver(() => _userAlias)
.SelectList(list => list
.Select(() => _userAlias.Id).WithAlias(() => testDtoAlias.UserId)
)
.TransformUsing(Transformers.AliasToBean<TestDto>())
.List<TestDto>();
}
private class TestDto
{
public long UserId { get; set; }
}
private readonly User _userAlias = null;
其工作只是罚款ENV1而是抛出异常:
NHibernate.QueryException: could not resolve property: <>4__this._userAlias.Id of: User
上ENV2。
注意如果我选择的ID列表不AleasToBean:
var users = GetSession()
.QueryOver(() => _userAlias)
.SelectList(list => list
.Select(() => _userAlias.Id)
)
.List<long>();
它适用于这两种环境如预期。
想什么可能会导致问题在env2?
workarroud很容易,只是在与方法相同的作用域上创建别名,但我想知道我在配置中缺少什么,因为它看起来正确。 :(
谢谢,我看到了答案......但我想知道为什么它在** env1 **中工作... –