尝试写一个通用的删除,即仅仅需要参数:实体类(对应表) abn,字段 id,字段的值 x,即可删除。
即将下面的代码写成通用的,感谢了,对 EF 真的困惑!
db.Entry(db.abns.Where(p=>p.ID== x).FirstOrDefault()).State = EntityState.Deleted;
db.SaveChanges();
写成 DbContext 的扩展方法:
public static void Delete<TEntity>(this DbContext dbContext,Func<TSource, bool> predicate)
{
DbSet<TEntity> dbSet = dbContext.Set<TEntity>();
dbSet.Remove(dbSet.FirstOrDefault(predicate));
}
// 调用:
db.Delete<abn>(p=> return p.ID == X;);
你好,提示
错误 32 扩展方法必须在非泛型静态类中定义 F:\CS_JSJC\jsjc\JSJC\Controllers\baseController.cs 21 18
还请您详细一些,感谢。
另外,请推荐一下学习此类技术的书籍,感觉非常迷茫,谢谢了,学习。
@zhbj: public static class DbContextEx
{
public static void Delete<TEntity>(this DbContext dbContext,Func<TSource, bool> predicate)
{
DbSet<TEntity> dbSet = dbContext.Set<TEntity>();
dbSet.Remove(dbSet.FirstOrDefault(predicate)); }
}
哪类技术?
@Launcher: 就是 DbSet<TEntity> 或者 IQueryable<TEntity> 类的,还有
context 的等等,就是阁下解决此类问题的相关技术书籍请推荐一下。
@zhbj: 这还真没有啥书籍,语法和类库方面就是翻MSDN。
@Launcher:
在controller 中,
public static class DbContextEx
{
public static void Delete<TEntity>(this DbContext dbContext, Func<TEntity, bool> predicate)
{
DbSet<TEntity> dbSet = dbContext.Set<TEntity>();
dbSet.Remove(dbSet.FirstOrDefault(predicate));
}
}
代码显示
错误 34 类型“TEntity”必须是引用类型才能用作泛型类型或方法“System.Data.Entity.DbContext.Set<TEntity>()”中的参数“TEntity” F:\CS_JSJC\jsjc\JSJC\Controllers\baseController.cs 659 36
请好人做到底,帮助写一个详细的额,真心不明白。 感谢
@zhbj:
public static class DbContextEx {
public static void Delete<TEntity>(this DbContext dbContext, Func<TEntity, bool> predicate)
where TEntity : class
{
DbSet<TEntity> dbSet = dbContext.Set<TEntity>(); dbSet.Remove(dbSet.FirstOrDefault(predicate));
}
// 泛型约束。
这些都可以在 MSDN 中介绍关于泛型的知识中找到。
}