ITable <t> .DeleteAllOnSubmit()缺席?</t>

时间:2011-03-11 18:38:26

标签: c# .net itable

据我所知ITable<T>接口没有DeleteAllOnSubmit()接口和ITable类中存在的Table<T>方法。

我将自己实施这样的事情:

public static void DeleteAllOnSubmit<T>(this ITable<T> table, IEnumerable<T> entities)
{
    entities.ForEach(entity=>table.DeleteOnSubmit(entity);
}

问题1:这里有任何陷阱吗?如果它如此容易,那么微软会自己实现......

问题2:为什么没有开箱即用?

2 个答案:

答案 0 :(得分:0)

看一下Table<TEntity>.DeleteAllOnSubmit<TSubEntity>()节目的实施情况,发现没有更多内容:

public void DeleteAllOnSubmit<TSubEntity>(IEnumerable<TSubEntity> entities) where TSubEntity: TEntity
{
    if (entities == null)
    {
        throw Error.ArgumentNull("entities");
    }
    this.CheckReadOnly();
    this.context.CheckNotInSubmitChanges();
    this.context.VerifyTrackingEnabled();
    foreach (TEntity local in entities.ToList<TSubEntity>())
    {
        this.DeleteOnSubmit(local);
    }
}

所以,我会说:你的实施很好。 顺便说一句:ForEach没有IEnumerable<T>扩展方法。

答案 1 :(得分:0)

或者你可以实现某些效果......

public static void DeleteAllOnSubmit<T>(this ITable<T> table, IEnumerable<T> entities)
{
    table.Context.GetTable<T>().DeleteAllOnSubmit(entities);
}

只需浏览ITable<T>到特定于上下文的表并调用其DeleteAllOnSubmit()即可。这样,您枚举和删除所有内容的方式以及上下文本身的方式都没有偏差。