我是NHibernate的新手,但設法讓我的最新項目運行良好。但是現在我已經達到了不可避免的性能問題,我需要超越抽象來修復它。NHibernate延遲加載似乎不適用於我的域?
我創建了一個nunit測試來隔離需要很長時間的方法。但首先我的領域模型的快速概述可能是一個好主意:
我有一個'PmqccForm'這是一個對象,有一個'項目'對象,其中包含名稱,數量等,它也有'問題'對象,它是一個本身包含各種不同'問題'對象的屬性的類。有一個JobVelocityQuestion對象,它本身有一個答案和一些其他屬性,以及一大堆類似的Question對象。 這就是我與有我PmqccForm談論一個問題,反對
這是模式的問題部分:
關鍵的一點是,我希望能夠輸入 form.Questions.JobVelocityQuestion
因爲每個PmqccForm總是有一個JobVelocityQuestion,所有其他問題都是一樣的。這些是Questions對象的C#屬性,它只是它們的持有位置。現在
,就是造成我的問題的方法是這樣的:
public IEnumerable<PmqccForm> GetPmqccFormsByUser(StaffMember staffMember)
{
ISession session = NHibernateSessionManager.Instance.GetSession();
ICriteria criteria = session.CreateCriteria(typeof(PmqccForm));
criteria.CreateAlias("Project", "Project");
criteria.Add(Expression.Eq("Project.ProjectLeader", staffMember));
criteria.Add(Expression.Eq("Project.IsArchived", false));
return criteria.List<PmqccForm>();
}
從剛剛運行此方法NUnit測試我的控制檯一看顯示有被processsed近2000 sql查詢! http://rodhowarth.com/otherstorage/queries.txt是控制檯日誌。
事情是,在這個階段我只想要表單對象,實際的問題可以在需要知道的基礎上訪問。我認爲NHibernate是爲了能夠做到這一點?
這裏是我的映射文件: http://rodhowarth.com/otherstorage/hibernatemapping.txt
誰能暗示我一下,我缺少的是什麼嗎?或者一種方法來優化我在做關於NHibernate的工作?
如果我將問題提交給一個集合,然後通過此集合使屬性循環並返回正確的集合,該怎麼辦?從nhibernates的角度來看,這會是更好的優化嗎?
可否請您更新室內用後你是如何調用上面的方法? – Baz1nga 2011-06-12 07:18:16