9

两者之间的性能是否存在巨大差异,例如我有这两个代码片段:

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();
}

对比

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();
}

两者中哪一个更好,并且由于在第一个代码段中 submitchanges 在循环外被调用,这两个代码片段是否具有相同的数据库访问次数?

4

2 回答 2

16

完全没有区别,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 的一个方便的包装器

于 2013-06-20T09:30:09.077 回答
-1

你可以找到很多这样的方便的方法,它们专注于编码效率。如果您有要一次插入数据库的实体列表,则可以使用InsertAllOnSubmit. 以下是我的一个项目的示例。

public void InsertAll(IEnumerable<MyClass> list)
    {
        DataContext.MyClasses.InsertAllOnSubmit<MyClass>(list);
        DataContext.SubmitChanges();
    }

此代码使我能够使用一行将多个实体添加到 DataContext。添加后,我可以一次性提交更改,避免任何多个数据库调用。

于 2014-07-26T03:16:11.357 回答