我在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 **中工作... –