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;
//}
}
ef core 公共接口封装
最新推荐文章于 2024-03-23 10:13:48 发布