2009-08-13 113 views
3

我基本上生病寫數據訪問層。我認爲這是一個無聊而毫無意義的努力。我設想一個開發環境,我可以創建我的實體/模型並開始構建應用程序。編寫DAL,程序等所花費的時間......只是滿足了我對項目的熱情。自動數據訪問層

我想要的是我的數據的通用儲存庫接口。喜歡的東西:

public interface IRepository 
{ 
    //Get individual TEntity item by id 
    TEntity GetItem<TIdentifier, TEntity>(TIdentifier id); 

    //Get individual TEntity item by the expression 
    TEntity GetItem<TIdentifier, TEntity, TArg>(Expression<Func<TArg, TEntity>> expression); 

    //Get individual TEntity item by the expression 
    TEntity GetItem<TIdentifier, TEntity, TArg1, TArg2>(Expression<Func<TArg1, TArg2, TEntity>> expression); 

    //Get all TEntity items 
    IList<TEntity> GetList<TEntity>(); 

    //Get all TEntity items, filtered by the expression 
    IList<TEntity> GetList<TEntity, TArg>(Expression<Func<TArg, IList<TEntity>>> expression); 

    //Get all TEntity items, filtered by the expression 
    IList<TEntity> GetList<TEntity, TArg1, TArg2>(Expression<Func<TArg1, TArg2, IList<TEntity>>> expression); 

    TIdentifier CreateItem... 

    bool UpdateItem... 

    bool DeleteItem... 
} 

我的東西特別感興趣的是將工作

  • Azure的數據服務
  • SQL服務器
  • SQLite的

...但理論適用於任何數據存儲庫

有沒有人遇到過現成的解決方案,還是我必須通過編寫更多的數據訪問層來解決這個問題,這比我曾經想過的要堅持一些。

注:我知道ORM的,我想要的東西,刪除要求編寫的任何DAL或存儲特效。

回答

3

看看NHibernate的,城堡的ActiveRecord,亞音速,LinqToSql,...

你說你知道的ORM,但他們做你的問題問究竟幾乎什麼,至少在可能的範圍內。

+0

難道我仍然不得不爲我所有的實體編寫特效嗎? – grenade 2009-08-13 13:50:09

+0

不,你不必寫存儲過程,你可以編寫LINQ語句。那麼你的所有代碼都在C#中。 – mkchandler 2009-08-13 13:51:26

+2

如果你的編程教條是編寫存儲過程,那麼是的,你將不得不編寫它們。我成功實現了使用LinqToSql作爲沒有存儲過程的ORM的Web窗體模型。 – JustLoren 2009-08-13 13:53:07

2

我知道你說你知道ORM的並不想要它們,但是你能處理一些你寫的數據訪問方法寫在LINQ的東西嗎?

我發現我喜歡用SQL聲明來寫LINQ聲明。如果你打開這個,我想看看實體框架,LINQ到SQL,等

編輯:如果你想使用Azure的,看看這個鏈接:http://social.msdn.microsoft.com/Forums/en-US/windowsazure/thread/74a0a57e-d979-48ed-b534-f449bac0f90d

+0

是的,Linq to SQL符合法案,但只適用於SQL Server。 Linq To Azure有沒有? – grenade 2009-08-13 13:52:04

+2

您可以使用ADO.NET數據服務連接到Azure並針對該問題編寫LINQ查詢。 – mkchandler 2009-08-13 13:55:32

+0

@ mc2thaH謝謝,我不知道。 – grenade 2009-08-13 14:01:41

0

使用LINQ ,這實際上將爲您執行所有數據訪問任務...

2

這是的Salamanca的目標之一。它仍然處於早期階段,但我們可以使用一個編碼手或兩個...

如果您想要一個現有的解決方案,我建議您深入研究可能與代碼生成工具相關的ORM(如其他建議):

看看這個非常完整的ORMs list