实体框架在提交时删除全部

Sha*_*ean 18 entity-framework

在LINQ to SQL中,我可以这样做:

context.User_Roles.DeleteAllOnSubmit(context.User_Roles.Where(ur => ur.UserId == user.UserId));
Run Code Online (Sandbox Code Playgroud)

什么与实体框架相当?

Fem*_*ref 24

foreach(var entity in context.User_Roles.Where(ur => ur.UserId == user.UserId))
{
  context.User_Roles.DeleteObject(entity);
}
context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

当然,你可以编写一个扩展方法,它将封装它.

这将是这样的:

public static void DeleteObjects<TEntity> (this ObjectSet<TEntity> set, IEnumerable<TEntity> data) where TEntity : class
{
  foreach(var entity in data)
    set.DeleteObject(entity);
}
Run Code Online (Sandbox Code Playgroud)

被称为:

context.User_Roles.DeleteObjects(context.User_Roles.Where(ur => ur.UserId == user.UserId))
context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)


Ste*_*sen 5

@Femaref有正确的想法,但对于L2E的真正模拟DeleteAllOnSubmit,你会希望你的扩展方法在枚举之前复制被删除的实体,这样你就不会在枚举时得到"集合修改"异常.

public static void DeleteAllObjects<TEntity>(this ObjectSet<TEntity> set, IEnumerable<TEntity> data) where TEntity : class {
    foreach(var entity in data.ToList()) //data.ToList() makes a copy of data for safe enumeration
        set.DeleteObject(entity);
}
Run Code Online (Sandbox Code Playgroud)