entity framewrk访问数据库的封装类
entity framewrk访问数据库的封装类
实体框架Entity Framework 是 ADO.NET 中的一组支持开发面向数据的软件应用程序的技术。是微软的一个ORM框架。
entity framewrk访问数据库的封装类 (MSSql 数据库 )
C# 代码 复制
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using System.Text;
namespace DAL
...{
public partial class MyEntities : DbContext
...{
public MyEntities(): base(GetEntityConnectionString(connectionString))
...{
}
private static string GetEntityConnectionString(string connectionString)
...{
EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder();
entityBuilder.Metadata = "res://*/MyDB.csdl|res://*/MyDB.ssdl|res://*/MyDB.msl";
entityBuilder.ProviderConnectionString = connectionString;
entityBuilder.Provider = "System.Data.SqlClient";
return entityBuilder.ToString();
}
}
/**//// <summary>
/// MSSql 数据库 数据层 父类
/// </summary>
/// <typeparam name="T"></typeparam>
public class BaseDAL<T> where T : class,new()
...{
/**//// <summary>
/// EF 上下文对象
/// </summary>
MyEntities db = new MyEntities();
1.0 新增实体,返回受影响的行数 + int Add(T model)#region 1.0 新增实体,返回受影响的行数 + int Add(T model)
/**//// <summary>
/// 1.0 新增实体,返回受影响的行数
/// </summary>
/// <param name="model"></param>
/// <returns>返回受影响的行数</returns>
public int Add(T model)
...{
db.Set<T>().Add(model);
//保存成功后,会将自增的id设置给model的主键属性,并返回受影响的行数。
return db.SaveChanges();
}
#endregion
新增实体,返回对应的实体对象 + T AddReturnModel(T model)#region 新增实体,返回对应的实体对象 + T AddReturnModel(T model)
/**//// <summary>
/// 1.1 新增实体,返回对应的实体对象
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public T AddReturnModel(T model)
...{
db.Set<T>().Add(model);
db.SaveChanges();
return model;
}
#endregion
根据id删除 + int Del(T model)#region 根据id删除 + int Del(T model)
/**//// <summary>
/// 根据id删除
/// </summary>
/// <param name="model">必须包含要删除id的对象</param>
/// <returns></returns>
public int Del(T model)
...{
db.Set<T>().Attach(model);
db.Set<T>().Remove(model);
return db.SaveChanges();
}
#endregion
根据条件删除 + int DelBy(Expression> delWhere)#region 根据条件删除 + int DelBy(Expression<Func<T, bool>> delWhere)
/**//// <summary>
/// 2.1 根据条件删除
/// </summary>
/// <param name="delWhere"></param>
/// <returns>返回受影响的行数</returns>
public int DelBy(Expression<Func<T, bool>> delWhere)
...{
//2.1.1 查询要删除的数据
List<T> listDeleting = db.Set<T>().Where(delWhere).ToList();
//2.1.2 将要删除的数据 用删除方法添加到 EF 容器中
listDeleting.ForEach(u =>
...{
db.Set<T>().Attach(u); //先附加到EF 容器
db.Set<T>().Remove(u); //标识为删除状态
});
//2.1.3 一次性生成sql语句 到数据库执行删除
return db.SaveChanges();
}
#endregion
修改实体 + int Modify(T model)#region 修改实体 + int Modify(T model)
/**//// <summary>
/// 修改实体
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public int Modify(T model)
...{
DbEntityEntry entry = db.Entry<T>(model);
entry.State = EntityState.Modified;
return db.SaveChanges();
}
#endregion
修改实体,可修改指定属性 + int Modify(T model, params string[] propertyNames)#region 修改实体,可修改指定属性 + int Modify(T model, params string[] propertyNames)
/**//// <summary>
/// 3.1 修改实体,可修改指定属性
/// </summary>
/// <param name="model"></param>
/// <param name="propertyName"></param>
/// <returns></returns>
public int Modify(T model, params string[] propertyNames)
...{
//3.1.1 将对象添加到EF中
DbEntityEntry entry = db.Entry<T>(model);
//3.1.2 先设置对象的包装状态为 Unchanged
entry.State = EntityState.Unchanged;
//3.1.3 循环被修改的属性名数组
foreach (string propertyName in propertyNames)
...{
//将每个被修改的属性的状态设置为已修改状态;这样在后面生成的修改语句时,就只为标识为已修改的属性更新
entry.Property(propertyName).IsModified = true;
}
return db.SaveChanges();
}
#endregion
批量修改 + int ModifyBy(T model, Expression> whereLambda, params string[] modifiedPropertyNames)#region 批量修改 + int ModifyBy(T model, Expression<Func<T, bool>> whereLambda, params string[] modifiedPropertyNames)
/**//// <summary>
/// 3.2 批量修改
/// </summary>
/// <param name="model"></param>
/// <param name="whereLambda"></param>
/// <