2010-09-17 94 views
1

我有一個名爲Incident的實體和一個名爲IncidentDTO的DTO。現在,只需IncidentDTO看起來是這樣的:如何停止AutoMapper使用NHibernate創建兩個相同的SELECT語句?

public class IncidentDTO : Incident 
{ 
    // empty until I can get AutoMapper working correctly 
} 

我想拉的所有Incidents列表在數據庫中,使用此代碼並將其轉換爲DTO的:

Mapper.CreateMap<Incident, IncidentDTO>(); 

using (var session = SessionFactory.OpenSession()) 
{ 
    var incidents = session.Linq<Incident>(); 
    var incidentDTOs = Mapper.Map(incidents, new List<IncidentDTO>()); 
} 

此代碼工作很好,除了當我用NHProf看看生成的SQL語句,我得到這個:

SELECT ... FROM [Incident] this_ 
SELECT ... FROM [Incident] this_ 

兩個SELECT語句完全相同。爲什麼AutoMapper會生成兩個相同的SELECT語句,我該如何阻止它執行此操作?

回答

1

猜測:枚舉的IQueryable創建的每個項目單獨的選擇。列舉IList解決它。

var incidents = session.Linq<Incident>().ToList(); 

我可能會這樣做,以防止另一個問題。

int someReasonableNumber = 1000; 
var incidents = session.Linq<Incident>().Take(someReasonableNumber).ToList(); 

這只是一個猜測,不是我真正知道的。

+0

這樣做,謝謝!我沒有考慮首先枚舉查詢。至於未綁定的設置,這不是一個問題,因爲我沒有預見「事件」數量會超過200。 – 2010-09-18 00:05:54

0

我認爲你的問題與此相關的issue

+0

不幸的是,這不是一個SELECT N + 1問題。 「事件」與其他任何事情都沒有關聯。 – 2010-09-17 21:06:00