ef core 公共接口封装 电脑版发表于:2019/10/11 17:21 show me code: ``` public interface ICommonDAL<T> where T : class, new() { protected EFContext context { get; } /// <summary> /// 新增一个实体 /// </summary> /// <param name="entity"></param> /// <returns></returns> public int Add(T entity) { if (entity == null) return -1; context.Entry<T>(entity).State = Microsoft.EntityFrameworkCore.EntityState.Added; return context.SaveChanges(); } /// <summary> /// 批量添加 /// </summary> /// <param name="entitys"></param> /// <returns></returns> public int BatchAdd(List<T> entitys) { if (entitys == null) return -1; foreach (T item in entitys) { context.Entry<T>(item).State = Microsoft.EntityFrameworkCore.EntityState.Added; } return context.SaveChanges(); } public int Deleted(T entity) { if (entity == null) return -1; context.Entry<T>(entity).State = Microsoft.EntityFrameworkCore.EntityState.Deleted; return context.SaveChanges(); } public T AddReturnEntity(T entity) { context.Entry(entity).State = Microsoft.EntityFrameworkCore.EntityState.Added; int count = context.SaveChanges(); if (count > 0) return entity; else return null; } public int Update(T t, string keyName) { var entry = context.Entry<T>(t); //把user对象加入上下文,但是没有改变 entry.State = Microsoft.EntityFrameworkCore.EntityState.Unchanged; //使用反射找到不为空的字段 foreach (var item in t.GetType().GetProperties()) { //虚拟属性是导航属性 if (item.GetMethod.IsVirtual) { continue; } //拿到属性值 object obj = item.GetValue(t); if (obj != null) { //不是主键才去修改,如果是主键就不需要修改了 if (item.Name != keyName) { //表示该字段需要更新 entry.Property(item.Name).IsModified = true; } } } return context.SaveChanges(); } public T GetElementById(int Id) { string name = typeof(T).Name; T element = context.Database.SqlQuery<T>("select * from " + name + " where Id=@Id", new SqlParameter("@Id", Id)).FirstOrDefault(); return element; } //public T GetMyNoteFileById(int Id) //{ // T value = context.Set<T>().Where(a=>a.); // return myNoteFile; //} } ```