2014-03-04 77 views
1

我有使用ADO.NET在ASP.NET MVC 4上建立的項目。從ADO.NET移植到實體框架

但我認爲我的數據訪問層不符合標準。在我的公司中,數據獲取以這種方式工作 - 首先,查詢結果的所有列的索引都存儲在變量中。然後,使用這些索引變量獲取值。 它節省了時間,因爲DataReader["Name"]會比DataReader[0]

慢但這種方法使我的開發速度變慢(映射變量等)。另外,在獲取單個記錄時,它實際上將工作加倍 - 首先獲取索引,然後獲取數據,而不是僅獲取數據。

我在考慮遷移到EF。

無論我看到有關EF的文檔,我都用EF來解釋它,我已經寫好的存儲過程是沒用的。

是這樣的,如果我現在遷移到EF,我將不得不爲我所有的CRUD操作再次編寫代碼?

+0

可以在EF中使用存儲過程。根據您的SP的結構,您可能可以在EF中使用它們。 –

+0

謝謝@HåkanFahlstedt不使用SPs打敗EF的目的? – Lakshay

+0

那麼,在EF中使用SP的可能性就像您的情況一樣,那裏已經有一個帶有SP的數據庫。如果你應該從沒有數據庫開始,可能根本不需要使用SP,但總是有一些例外。即使在這種情況下,使用SP時,使用EF也會獲得許多OR映射器的好處。 –

回答

1

有不同的方式來調用存儲過程。我個人喜歡使用EDMX文件。

只有幾個步驟:

  • 導入存儲過程

enter image description here

  • 創建函數導入

下面是一個例子,我一個包裹到function import的方法:

private static List<GetEmployees_Result> GetEmployeeList() 
    { 
     using (var db = new DBEntities()) 
     { 
      //do some crazy Linq 
      ObjectResult<GetEmployees_Result> listOfEmployees = db.GetEmployees("USA"); 
      return listOfEmployees.ToList(); 
     } 
    } 

完蛋了,現在比較,與ADO.NET的代碼的色調,你需要寫做同樣的事情!

SAMPLE PROJECT

+0

謝謝@meda ..任何人都可以建議我一個示例項目 – Lakshay

+0

@Lakshay我給你增加了一個示例項目bro – meda

+0

非常感謝bro @meda – Lakshay

1

你可能會做錯誤的原因。

如果DataReader["name"]DataReader[0]之間的性能原因在項目中產生了顯着差異,則添加另一個間接層(實體框架)可能會使性能變差。

但是,我寧願假設這種差異是並不是真的與您的情況相關,而您的公司正是通過誤導微觀優化的願望來做到這一點。

我的建議是嘗試使用EF,嘗試使用DataTable(DataRow.Field提供對查詢結果的類型安全訪問),將其與您當前的方法進行比較,然後選擇使您的開發生活更輕鬆的任何內容。在大多數情況下,數據訪問時間將在很大程度上支配任何「列名查找」時間,所以我不會過多擔心這一點。

+0

我明白了你的意思..謝謝:) – Lakshay