我仍在學習,並試圖使我的代碼更好,所以我決定使用接口和泛型來使我的CRUD代碼更好。NHibernate在sql搜索中使用.where()條件或以後使用LINQ?
到目前爲止,我已經爲我的數據庫中的每張表做了大量的回購。現在我試圖通過使用公共存儲庫來減少這個數量。
問題是,我的一些存儲庫要求使用比簡單SELECT更具體的條件進行搜索。
例如:
///<summary>
///Get handle for stanowisko where user defined that it should be used to count time of work for this machine
///</summary>
public HandleCzujnikiModel Select(string stanowisko, bool doObliczeniaCzasuPracy)
{
using (ISession session = NHibernateHelper.OpenSession())
{
return obj = session.Query<HandleCzujnikiModel>()
.Where(c => c.Stanowisko == stanowisko && c.DoObliczeniaCzasuPracy == doObliczeniaCzasuPracy).FirstOrDefault();
}
}
NHibernate的將創建一個SQL出於此。
現在我的問題是,我做了很多存儲庫,在我的存儲庫後繼承,我保持共同的SELECT,UPDATE等等,並有更多特定操作的額外方法。
還是我使用簡單的SELECT和後來使用LINQ服務器端來獲得我想要的結果。
我認爲這兩種解決方案都有其優點和缺點。
1)如果只使用,,主「庫我可以大幅減少類的數量 2)然而,這可能會導致更糟糕的表現?因爲我必須從數據庫中選擇更多的記錄和什麼更多使用額外的代碼。使用LINQ。凡條款,得到的結果
現在我的知識是有限的,因此我不得不尋求從StackOverflow的神:)
乾杯答案
你有沒有想過使用查詢模式?查看Ayende的博客文章http://ayende.com/blog/3955/repository-is-the-new-singleton)並查看關於查詢模式的評論。 – 2014-10-27 08:38:50
允許存儲庫的消費者提供'IQueryable'表達式樹(例如GenericRepository)的選項是一個[激烈爭論的問題](http://programmers.stackexchange.com/questions/192044/should-repositories-return-iqueryable ) - 它的支持者會說表達式樹是標準/規範模式的可接受表示,而批評者則會證明泄漏封裝和無法充分測試使用情況。 – StuartLC 2014-10-27 08:44:25