Linq to SQL, InsertOnSubmit против производительности InsertAllOnSubmit?
есть ли огромная разница в производительности между ними, например, у меня есть эти два фрагмента кода:
public void Insert(IEnumerable<ManageGeofenceViewModel> geofences)
{
var insertGeofences = new List<Geofence>();
foreach(var geofence in geofences)
{
Geofence insertGeofence = new Geofence
{
name = geofence.Name,
radius = geofence.Meters,
latitude = geofence.Latitude,
longitude = geofence.Longitude,
custom_point_type_id = geofence.CategoryID
};
insertGeofences.Add(insertGeofence);
}
this.context.Geofences.InsertAllOnSubmit(insertGeofences);
this.context.SubmitChanges();
}
vs
public void Insert(IEnumerable<ManageGeofenceViewModel> geofences)
{
foreach(var geofence in geofences)
{
Geofence insertGeofence = new Geofence
{
name = geofence.Name,
radius = geofence.Meters,
latitude = geofence.Latitude,
longitude = geofence.Longitude,
custom_point_type_id = geofence.CategoryID
};
this.context.Geofences.InsertOnSubmit(insertGeofence);
}
this.context.SubmitChanges();
}
какой из двух лучше и имеет ли два фрагмента кода одинаковое количество поездок в базу данных, так как в 1-м фрагменте submitchanges был вызван вне цикла?
2 ответов
нет никакой разницы вообще, InsertAllOnSubmit фактически вызывает InsertOnSubmit, вот код для InsertAllSubmit:
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)((object)enumerator.Current);
this.InsertOnSubmit(entity);
}
}
}
Как вы можете видеть InsertAllOnSubmit - это просто удобная обертка вокруг InsertOnSubmit
Вы можете найти много удобных методов такой, который фокусируется на эффективности кодирования. Если у вас есть список объектов, которые вы хотите вставить в базу данных сразу, вы можете использовать InsertAllOnSubmit
. Ниже приведен пример одного из моих проектов.
public void InsertAll(IEnumerable<MyClass> list)
{
DataContext.MyClasses.InsertAllOnSubmit<MyClass>(list);
DataContext.SubmitChanges();
}
этот код позволяет мне добавлять несколько объектов в DataContext с помощью одной строки. После добавления я могу отправить изменения за один раз, избегая любых нескольких вызовов базы данных.