2013-01-10 80 views
1

我有一個關於LINQ to SQL的問題。LinqToSQL InsertOnSubmit和InsertAllOnSubmit之間的區別

什麼是快:

public void CreateLocationImages(IEnumerable<LocationImage> list) 
    { 

     _db.LocationImages.InsertAllOnSubmit(list); 

     _db.SubmitChanges(); 

    } 

public void CreateLocationImages(IEnumerable<LocationImage> list) 
    { 
     foreach (LocationImage item in list) 
     { 
      _db.LocationImages.InsertOnSubmit(item); 
     } 
     _db.SubmitChanges(); 
    } 

也許沒有什麼區別?

回答

2

一個偉大的工具,因爲在這兩種情況下,你在呼喚SubmitChanges一次。這兩個代碼都會導致相同的性能。 (如果有任何不同的性能應該可以忽略不計)如果你的第二代碼段在for循環中有_db.SubmitChanges();,那麼它將是一個單獨的連接並在db中插入語句。

1

它幾乎是一樣的,ILSpy在此情況下,

// System.Data.Linq.Table<TEntity> 
public void InsertAllOnSubmit<TSubEntity>(IEnumerable<TSubEntity> entities) where TSubEntity : TEntity 
{ 
    if (entities == null) 
    { 
     throw Error.ArgumentNull("entities"); 
    } 
    this.CheckReadOnly(); 
    this.context.CheckNotInSubmitChanges(); 
    this.context.VerifyTrackingEnabled(); 
    List<TSubEntity> list = entities.ToList<TSubEntity>(); 
    using (List<TSubEntity>.Enumerator enumerator = list.GetEnumerator()) 
    { 
     while (enumerator.MoveNext()) 
     { 
      TEntity entity = (TEntity)enumerator.Current; 
      this.InsertOnSubmit(entity); 
     } 
    } 
}