EntityFramework.Extended是一個基於EntityFramework框架 IQueryable類型的擴展方法,包括Update、Delete。框架
它的優勢就是 修改刪除操做不單單有Id一個條件,能夠有過個條件;函數
作修改時不只能夠傳入整個實體類型,也能夠根據條件只傳入須要改變的局部字段內容。spa
1.Nuget程序包管理 搜索並下載程序集code
2.建立一個數據上下文blog
/ // <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.調用方法get
前提須要引用命名空間string
using EntityFramework.Extensions;it
請注意他是 IQueryable的擴展方法;io
修改局部字段內容:class
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); }