EntityFramework.Extended是一個基於EntityFramework框架 IQueryable類型的擴展方法,包括Update、Delete。
它的優點就是 修改刪除操作不僅僅有Id一個條件,可以有過個條件;
做修改時不僅可以傳入整個實體類型,也可以根據條件只傳入需要改變的局部字段內容。
1.Nuget程序包管理 搜索並下載程序集
2.創建一個數據上下文
/ // <summary> /// 數據上下文 /// </summary> public class MyDbContext:DbContext { #region 構造函數 /// <summary> /// 初始化一個 使用連接名稱為“default”的數據訪問上下文類 的新實例 /// </summary> public MyDbContext() : base("SqlServer") { } /// <summary> /// 初始化一個 使用指定數據連接名稱或連接串 的數據訪問上下文類 的新實例 /// </summary> public SchoolDbContext(string nameOrConnectionString) : base(nameOrConnectionString) { } #endregion #region 屬性 public DbSet<Member> Member { get; set; } #endregion }
3.調用方法
前提需要引用命名空間
using EntityFramework.Extensions;
請注意他是 IQueryable的擴展方法;
修改局部字段內容:
public bool ModifyName(int memberId,string name,string newName) { using (MyDbContext context = new MyDbContext()) { int state = context.Member.Update( m => m.Id==memberId && m.Name == newName, //修改條件 m => new Member { Name = newName }); //只修改Name return state > 0 ? true : false; } } #endregion
刪除操作:
public bool Delete(int memberId) { using (MyDbContext context = new MyDbContext()) { int state = context.Member.Delete( m => m.Id == memberId //修改條件 ); return state > 0 ? true : false; } }
如果把它封裝到Repository倉儲操作類里起來更方便了
/// <summary> /// 獲取 當前實體的查詢數據集 /// </summary> public virtual IQueryable<TEntity> Entities { get { return EFContext.Set<TEntity>(); } }
/// <summary> /// 刪除所有符合特定表達式的數據 /// </summary> /// <param name="predicate"> 查詢條件謂語表達式 </param> /// <returns> 操作影響的行數 </returns> public virtual int Delete(Expression<Func<TEntity, bool>> predicate) { return Entities.Delete(predicate); } /// <summary> /// 修改操作 /// </summary> /// <param name="fun1">查詢條件-謂語表達式</param> /// <param name="fun2">實體-謂語表達式</param> /// <returns>操作影響的行數</returns> public virtual int Update(Expression<Func<TEntity, bool>> fun1, Expression<Func<TEntity, TEntity>> fun2) { return Entities.Update(fun1, fun2); }