2013-07-01 124 views
2

我已經開發了使用php的網站,並且現在我已經去除了學習ASP.NET MVC,因爲我發現我的自編碼很多C#用於桌面應用程序。ASP.NET MVC數據庫使用

我遇到的問題是我用來通過函數和自定義SQL命令建立到SQL服務器的連接。從我的理解你不應該這樣做與MVC,而是使用實體框架(DbContext)來同步數據庫和模型之間的數據。也許我不完全理解這背後的邏輯,但我認爲它浪費資源。

我正在處理的當前應用程序需要很多與書呆子晚餐應用程序(我目前正在學習代碼)具有更多搜索功能相同的功能。

有人能讓我更好地理解爲什麼我應該使用實體框架嗎?

感謝

+0

好吧,如果你想要快速編寫低性能的應用程序,那麼你應該使用EF。如果您想更努力地編寫高性能應用程序,那麼您可以查看dapper.net或手寫的'SqlCommand'。使用MVC不會限制您以任何方式訪問數據。 – Anri

回答

3

ASP.NET MVC完全獨立於任何類型的數據庫訪問;你可以選擇你想使用的任何東西。但是很多教程都會使用Entity Framework,主要是因爲它是新的,而且易於使用。

實體框架通過將SQL表映射到標準C#類來簡化您的數據訪問。如果您使用EF Code-First,您甚至可以通過在C#中定義這些類來完成它,並讓Entity Framework設置您的數據庫,以便您永遠不需要觸摸SQL。然後,由於您的數據庫及其中的表映射爲C#類,因此您可以使用C#代碼添加,查詢,更新和刪除數據庫中的條目。主要好處是:

  • 所有的邏輯在一個地方,在一種語言。這包括定義你的類型/表,查詢,插入和更新一切。這使得編寫起來更容易,更易於調試,並且更容易將其全部保存在源代碼管理中。
  • 您的數據庫實體是「普通舊CLR對象」(POCO)。這意味着你可以把它們放在一個List<T>中,你可以給它們構造函數做自定義初始化,你可以使用繼承來簡化它們的結構,明確它們之間的關係並利用代碼中的多態性......你可以做任何你能做的事情使用常規的C#類,不需要映射或轉換。
  • 您可以使用C#查詢語法,無論是這樣的:

    from x in table1 
    where x.foo == bar 
    select x.thing 
    

    或像這樣:

    db.table1.x.Where(x => x.foo == bar).Select(x => x.thing); 
    

    兩個給你編譯時類型檢查和智能感知自動完成,都將生成等效的SQL,並且只有在您需要獲取實際結果時纔會將查詢發送到數據庫,例如.ToList()

  • 實體框架的DbContext類就像數據庫的快照,當您調用.SaveChanges()時,將任何更改應用到數據庫。這使得使用事務訪問和工作單位模式變得很容易,這基本上意味着如果在操作中出現問題,您可以放棄整個變更集並知道您的數據庫沒有被混亂半完成的任務。

有一些缺點,主要與拍攝快照並使其保持同步的性能損失以及將C#轉換爲SQL的開銷有關(有時它會花費比您需要的更多內存並執行但通常可以通過寫得很好的查詢來避免),但在很多情況下,除非數據庫數據量巨大,否則您不會注意到其中的差異。對於剛接觸ASP.NET MVC的人,我肯定會推薦實體框架來訪問數據庫;它會避免它的麻煩,讓你專注於邏輯。

+0

您是否推薦了一個我可以學習更多關於EF的網站? – Radar5000

+0

總是有[MSDN](http://msdn.microsoft.com/en-gb/data/ef.aspx);從那裏你可以按照[入門](http://msdn.microsoft.com/en-gb/data/ee712907)鏈接進入一個完整的教程和演練頁面。我建議你從[哪個工作流](http://msdn.microsoft.com/en-gb/data/jj590134)開始學習不同的方法,然後對於一個學習項目,我建議從代碼開始,第一。對於關注使用帶有ASP.NET MVC的EF的內容,請查看[www.asp.net上的此頁](http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc )並在那裏運行教程。 – anaximander

0

嗯,我認爲你即將兩種方法,即ORM(實體框架)和普通的SQL對象(SQL命令)進行比較。你應該看看these answers。我希望你能澄清你的問題。

1

你理解不正確。 MVC沒有任何數據庫支持。你可以使用任何你想要的數據庫技術,而MVC沒有什麼可說的。

是的,的確,大多數示例和演示都使用實體框架,但這是因爲EF在數秒內完成數據庫訪問並不需要編寫大量樣板代碼。 ORM在那裏將關係數據庫映射到對象以更好地匹配對象模型的數據模型。

如果你喜歡,你可以自由使用煙霧信號和信鴿。可能需要10倍的時間才能完成您的應用。