据我所知,ITable<T>接口没有存在于ITable接口和Table<T>类中的DeleteAllOnSubmit()方法。
我将自己实现这样的东西:
public static void DeleteAllOnSubmit<T>(this ITable<T> table, IEnumerable<T> entities)
{
entities.ForEach(entity=>table.DeleteOnSubmit(entity);
}问题1:这里有什么陷阱吗?如果真的这么简单,微软就会自己实现它们……
问题2:为什么没有开箱即用?
发布于 2011-03-12 03:15:57
看一看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);
}
}所以,我会说:你的实现很好。顺便说一句:IEnumerable<T>没有ForEach扩展方法。
发布于 2011-03-12 03:19:14
或者,您可以实现一些效果如下的内容:
public static void DeleteAllOnSubmit<T>(this ITable<T> table, IEnumerable<T> entities)
{
table.Context.GetTable<T>().DeleteAllOnSubmit(entities);
}只需遍历ITable<T>到特定于上下文的表,并调用它的DeleteAllOnSubmit()。这样,在枚举和删除all的方式以及上下文本身的方式上就不会出现偏差。
https://stackoverflow.com/questions/5276958
复制相似问题