2010-12-04 54 views
0

什麼是最通用的方法來處理C#C#數據庫交互

用戶數據庫的交互我希望能夠easilly交換數據庫驅動程序(數據提供者)。

我也覺得(不知道是否有可能),這將是巨大的,如果我可以從一些切換數據源DB樣(例如,普通MySQL數據庫)的東西絕對是另一個 - 如數據序列化爲xml或任意二進制文件。 我懷疑最後一種情況是需要編寫一些Query-File交互包裝或類似的東西。


所以 - 可能有人共享的方式來實現所描述的行爲嗎?

我可以肯定地使用LINQ作爲我的查詢,它確實引入了一些抽象 - 但它足以使數據源可以互換嗎?

如果是的話,那麼我應該怎麼做才能實現這一目標?我的開發流程將如何展現?

謝謝。

回答

2

下面是一個使用EF框架演練一個小程序存儲庫模式:

someRepository.Find.Where(something => something.IsRed && something.IsBig) 

創建一個名爲包含所有的數據訪問方法類型T的「IRepository」通用接口。

它看起來是這樣的:

interface IRepository<T> where T : class 
{ 
    IEnumerable<T> FindAll(Expression<Func<T, bool>> exp); 

    T FindSingle(Expression<Func<T, bool>> exp); 

    // And many more! 
} 

創建一個抽象的「倉庫」類實現了這個接口:

class Repository<T> : IRepository<T> where T : class 
{ 
    TestDataContext _dataContext = TestDataContext(); // Would be your EF Context 

    public IEnumerable<T> FindAll(Expression<Func<T, bool>> exp) 
    { 
     _dataContext.GetTable<T>().Where<T>(exp); 
    } 

    public T FindSingle(Expression<Func<T, bool>> exp) 
    { 
     _dataContext.GetTable<T>().Single(exp); 
    } 

    // And many more! 
} 

我們現在可以爲ModelClass表創建一個接口/對象,它實現我們的'IRepository'和擴展抽象'Repository'類並實現'IModelClassInterface'的具體類:

interface IModelClassRepository : IRepository<ModelClass> 
{ 
} 

和匹配的存儲庫來實現它:

class ModelClassRepository : Repository<ModelClass>, IModelClassRepository 
{ 
} 

我建議,因爲它爲您提供了很大的靈活性,以及​​足夠的力量來控制所有你的小實體使用這種方法。

調用這些方法將是超級簡單的這樣:

ModelClassRepository _repo = new ModelClassRepository(); 
_repo.Find.Where(something => something.IsRed && something.IsBig) 

是的,這意味着你必須做一些工作,但它是地獄更容易爲你以後更改數據源。

你甚至可以用任何你選擇的數據提供者來切換EF框架。無論是XML,db4o還是普通的舊Txt。

0

您應該查看存儲庫模式。

Asp.net還使用了所謂的提供模式創建熱插拔組件,如會員供應商,地圖供應商等

+1

存儲庫在我看來,除了一個好的數據庫抽象工具外,還應該使用模式。 – 2010-12-04 01:06:03

+0

是的,使用存儲庫模式來保持你的代碼不依賴於任何特定的數據庫,然後使用像Entity Framework這樣的體面的orm來保存處理sql和更改跟蹤的頭痛。 – rtpHarry 2010-12-04 01:20:59

0

1個字。

NHibernate的

NH3.0支持LINQ,其繁瑣的換出的Posgres或MyFailSQL SQL服務器。 「像數據序列化到xml或任意二進制文件」

「。不知道這意味着什麼。

+0

我不會調用NHibernate的「Generic」,但它會支持將DB從SQL Server交換到MySQL。 – 2010-12-04 01:09:49

+0

與使用L2S,EF,LightSpeed等不同,它不是「通用」,但它的地址能夠使用LINQ類型查詢並將數據庫交換出去。 – Phill 2010-12-04 01:32:24

0

在.NET框架中,現在這個權利的事實標準是Entity Framework。因爲最近EF版本4發佈了,它解決了大量關於舊版本的疑慮 - 請檢查您閱讀的文章的日期,以便在網上查找EF的任何批評。在我看來,它是.NET空間中最好的數據庫抽象工具(我曾嘗試過)。

小心LINQ to SQL,微軟不太可能投入大量資源來改進產品,因爲EF現在是這一領域的旗艦產品。

0

我可以建議你看看LLBLGen Pro。我們一直在使用他們的ORM,它吹走了競爭對手。他們的新版本允許您使用他們的工具併爲多個框架生成代碼(實體框架,nhibernate,linq-to-sql)。但是他們的框架似乎是很多情況下最靈活的。

你可以從他的blog找到更多關於Frans的信息。他是LLBLGen的主要專家和LLBLGen的創始人。

0

「在C#中處理用戶 - 數據庫交互的最通用的方式是什麼?」?

最通用的方式是ADO.NET ......這只是SQL塊或調用存儲過程在您的數據庫中,有它的優點。然而,它有很多缺點,因爲它不容易抽象到OOP沒有任何intellisense ... EF非常酷,因爲它解決了許多這些缺點,但如果它對你來說是新的語法需要一點點習慣