DiP*_*Pix 6 c# linq generics entity-framework
根据这里的信息.
我找到了如何使用Entity Framework删除孤儿.
public void SaveChanges()
{
context.ReportCards
.Local
.Where(r => r.Student == null)
.ToList()
.ForEach(r => context.ReportCards.Remove(r));
context.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
我想知道如何为这部分制作通用函数,因为它可能经常被使用:
context.ReportCards
.Local
.Where(r => r.Student == null)
.ToList()
.ForEach(r => context.ReportCards.Remove(r));
Run Code Online (Sandbox Code Playgroud)
我想过这样的事情:
public void SaveChanges()
{
RemoveOrphans(Student, ReportCards)
context.SaveChanges();
}
private void RemoveOrphans<T>(T sourceContext, T orphan)
{
context.orphan
.Local
.Where(r => r.sourceContext == null)
.ToList()
.ForEach(r => context.orphan
.Remove(r));
}
Run Code Online (Sandbox Code Playgroud)
但当然它不起作用.有什么建议?
您可以编写具有相同功能的扩展方法:
public static void RemoveOrphans<TEntity>(this IDbSet<TEntity> entities,
Func<TEntity, bool> orphanPredicate)
where TEntity: class
{
entities.Local.Where(orphanPredicate).ToList().ForEach(e => entities.Remove(e));
}
Run Code Online (Sandbox Code Playgroud)
并以这种方式使用它
context.ReportCards.RemoveOrphans(r => r.Student == null);
context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
您还可以使用简单的泛型方法,该方法接受IDbSet<TEntity>作为第一个参数,但它不会是可读的
RemoveOrphans(context.ReportCards, r => r.Student == null);
context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)