转载:
1、EF(Entity Framework)
实体框架EF是ADO.NET中的一组支持开发面向数据的软件应用程序的技术,是微软的一个ORM框架。2、什么是ORM?ORM指的是面向对象的对象模型和关系型数据库的数据结构之间的互相转换。(表实体跟表之间的相互转换)ORM框架有很多,EF框架是ORM框架的其中一种,是实现了ORM思想的框架。O=>表实体M=>映射关系R=>数据库.表3、创建EF,添加-新建项-ADO.NET 实体数据模型<configuration> <!--必须紧跟着configuration下面添加--> <configSections> <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> </configSections> <entityFramework> <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> <parameters> <parameter value="v11.0" /> </parameters> </defaultConnectionFactory> </entityFramework> <!--数据库连接字符串,使用EF必须添加providerName="System.Data.EntityClient"--> <connectionStrings> <add name="ModelContainer" connectionString="metadata=res://*/Model.csdl|res://*/Model.ssdl|res://*/Model.msl;provider=System.Data.SqlClient;provider connection string="data source=.;initial catalog=HX_Shop;persist security info=True;user id=sa;password=123456;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" /> </connectionStrings></configuration>4、简单的EF使用入门//创建EF上下文 Model.ModelContainer db = new Model.ModelContainer(); //下面有线程内实例唯一的例子 UserInfo info = new UserInfo(); info.Name = "张三"; db.UserInfo.Add(info); //添加数据 db.SaveChanges(); //最后必须SaveChanges()才能保存,把状态的实体映射回数据库。 //info.Id = 1; //修改或删除操作,必须要有主键。 //db.Entry(entity).State = EntityState.Added; //添加 //db.Entry (entity).State = EntityState.Modified; //修改 //db.Entry (entity).State = EntityState.Deleted; //删除
public T AddEntity(T entity)
{ //EF4.0的写法 添加实体 //db.CreateObjectSet<T>().AddObject(entity); //EF5.0的写法 db.Entry<T>(entity).State = EntityState.Added; //下面的写法统一 db.SaveChanges(); return entity;}public bool UpdateEntity(T entity){ //EF4.0的写法 //db.CreateObjectSet<T>().Addach(entity); //db.ObjectStateManager.ChangeObjectState(entity, EntityState.Modified); //EF5.0的写法 db.Set<T>().Attach(entity); db.Entry<T>(entity).State = EntityState.Modified; return db.SaveChanges() > 0; }public bool DeleteEntity(T entity){ //EF4.0的写法 //db.CreateObjectSet<T>().Addach(entity); //db.ObjectStateManager.ChangeObjectState(entity, EntityState.Deleted); //EF5.0的写法 db.Set<T>().Attach(entity); db.Entry<T>(entity).State = EntityState.Deleted; return db.SaveChanges() > 0;}public IQueryable<T> LoadEntities(Func<T, bool> whereLambda)
{ //EF4.0的写法 //return db.CreateObjectSet<T>().Where<T>(whereLambda).AsQueryable(); //EF5.0的写法 return db.Set<T>().Where<T>(whereLambda).AsQueryable();}执行SQL语句//EF4.0的写法public int ExcuteSql(string sql, params ObjectParameter[] parameters){ return DbContext.ExecuteFunction(sql, parameters);}//EF5.0的写法public int ExecuteSql(string sql, params System.Data.SqlClient.SqlParameter[] pars){ return DbContext.Database.ExecuteSqlCommand(sql, pars);}public class BaseRepositorywhere T:class,new () { private DbContext DbContext { get { return DbContextFactory.CreateDbContext(); //创建唯一实例。 } } //简单查询 public IQueryable LoadEntities(Expression > whereLambda) { return DbContext.Set ().Where(whereLambda).AsQueryable(); } //分页查询 *** public IQueryable LoadPageEntities (int pageSize, int pageIndex, out int totalCount, Expression> whereLambda, bool isAsc, Expression > orderBy) { IQueryable result = DbContext.Set ().Where(whereLambda).AsQueryable(); totalCount = result.Count(); //返回总记录条数 if (isAsc) { result = result.OrderBy(orderBy) .Skip(pageSize * (pageIndex - 1)) .Take(pageSize) .AsQueryable(); } else { result = result.OrderByDescending(orderBy) .Skip(pageSize * (pageIndex - 1)) .Take(pageSize) .AsQueryable(); } return result; } public T Add(T entity) { DbContext.Set ().Add(entity); return entity; } public bool Detele(T entity) { DbContext.Entry(entity).State = EntityState.Deleted; return true; } public bool Update(T entity) { DbContext.Entry(entity).State = EntityState.Modified; return true; } }
////// 保证EF的上下文。线程内实例唯一,一次请求一个实例、 /// public static class DbContextFactory { public static DbContext CreateDbContext() { //线程内实例唯一 DbContext db = (DbContext)HttpContext.Current.Items["DbContext"]; if (db == null) { db = new Model.ModelContainer(); HttpContext.Current.Items.Add("DbContext", db); } return db; } }