2011-07-29 172 views
2

我剛剛從L2S轉移到EF 4.在L2S,我大量使用DataContext的InsertAllOnSubmit方法,但在EF中,似乎沒有這樣的方法可用。我已經在ObjectContext上編寫了這種通用擴展方法自定義InserAllOnSubmit在實體框架

public static void InsertAllOnSubmit<T>(this ObjectContext db, List<T> newentities) where T:EntityObject 
     { 
      var objectSet = db.CreateObjectSet<T>(); 
      newentities.ForEach(x => objectset.AddObject(x)); 
     } 

我想知道使用此方法的缺陷是什麼。我可以猜到,有一些演員與CreateObjectSet<T>()有關。但是,我不知道多少費用是如何創建對象集發生再加上我想了解其他不良影響這種方法將有
感謝

回答

2

當涉及到性能類似這樣的問題你要真正的唯一途徑通過測試確定成本。我可能是錯的,但我敢打賭,Linq to Sql調用InsertAllOnSubmit正在做一些類似於foreach循環的操作,一次添加一個實體。唯一的辦法就是引入類似反射器的東西來查看.net框架的代碼。

要確定給定代碼片段的成本,唯一真正的方法就是做一些測試。如果您擔心db.CreateObjectSet的成本,請嘗試創建另一個利用您的實際EF DataContext並通過一些壓力測試運行的方法。這將讓你知道你的上述方法是多麼昂貴。

2

不知道你爲什麼要重寫實體框架,這已經被支持了,它是以不同的方式完成的。你可以簡單地將對象添加到記錄集合並調用SaveChanges()框架將保存任何更改,包括編輯時的插入和刪除操作

+0

我解釋了我剛剛從L2S遷移到Ef和L2s我使用了InsertAllOnSubmit,DeleteAllOnsubmit等,我想在ef中也有相同的方法。我介紹了一種可行的方法,並希望知道這種方法的缺陷。 –

+0

一個陷阱會讓你更難閱讀/維護代碼,再加上你可能會因爲邏輯的重複而增加性能。 –

+0

它將如何重複邏輯甚至更難讀? –