我使用NHibernate的2.0.1和.NET 我與延遲加載的關聯延遲加載協會和鑄造
我有了協會等BusinessObject的在它BusinessObject的類面臨的問題,並能去更深。
以下函數在BusinessObject中讀取BusinessObject中集合的值。
public virtual object GetFieldValue(string fieldName)
{
var fieldItems = fieldName.Split(AppConstants.DotChar);
var objectToRead = this;
for (var i = 0; i < fieldItems.Length - 1; i++)
{
objectToRead = (BusinessObject) objectToRead.GetFieldValue(fieldItems[i]);
}
//if (objectToRead._data == null) return objectToRead.SystemId + " Error: _data was null";
return objectToRead.FieldValue(fieldName.LastItem());
}
的FieldValue
功能下面
private object FieldValue(string fieldName)
{
return _data.Contains(fieldName) ? _data[fieldName] : null;
}
的BusinessObject
描述具有字典_data
存儲該字段值。
假設字段名是BusinessDriver.Description
並具有該領域的BusinessObject的是StrategyBusinessDriver
此代碼打破了字段名分成兩個 - BusinessDriver
& Description
。 第一次迭代從StrategyBusinessDriver
讀取BusinessDriver
對象。 它被投入BusinessObject
類型,以便我可以再次撥打GetFieldValue
來讀取下一個字段,即BusinessDriver
中的Description
。
問題是,當我在第一次迭代中讀取BusinessDriver
並將其轉換時,我得到了Ids和BusinessObject的所有其他詳細信息,但是字段字典_data
和其他集合未提取。當我讀取BusinessObject的_data時,應該會延遲讀取。 但是,這並沒有發生,我得到一個錯誤,_data爲空。
是否有某些錯誤的編碼,因爲它不會延遲取回集合? 如有需要,請索取更多說明。 在此先感謝。
更新: 我對問題有更深入的瞭解。 如果在BusinessObject內部遞歸調用函數,則加載BusinessObject字段的代碼不會被延遲加載。 如果我將這個邏輯移出BusinessObject,延遲加載的工作原理! 有沒有辦法讓它在BusinessObject中工作?
UPDATE:映射文件
<joined-subclass name="Japt.Core.Domain.Data.BusinessObject, Japt.Core, Version=0.0.1608.0, Culture=neutral, PublicKeyToken=null" table="BusinessObject_BusinessDriverStrategyMap" entity-name="BusinessDriverStrategyMap">
<key column="SystemId" />
<dynamic-component name="_data" insert="true" update="true" optimistic-lock="true">
<many-to-one class="Japt.Core.Domain.Data.BusinessObject, Japt.Core, Version=0.0.1608.0, Culture=neutral, PublicKeyToken=null" name="Strategy" entity-name="Strategy">
<column name="Strategy" />
</many-to-one>
<many-to-one class="Japt.Core.Domain.Data.BusinessObject, Japt.Core, Version=0.0.1608.0, Culture=neutral, PublicKeyToken=null" name="BusinessDriver" entity-name="BusinessDriver">
<column name="BusinessDriver" />
</many-to-one>
</dynamic-component>
<dynamic-component name="_collections" insert="true" update="true" optimistic-lock="true" />
</joined-subclass>
是的,StrategyBusinessDriver也是一個BusinessObject。 我附上上面的映射文件。 _data是一個私人字段。但是,它是一個字典,用於映射動態組件。(我有動態列) – Zuber 2010-03-20 09:19:16
我不知道如何附加一個文件,並且代碼標記中沒有接受整個映射文件 – Zuber 2010-03-20 09:24:46