实体框架(Entity Framework) 简称EF,属于数据持久(持久保存)层框架里面的一种,其他的还有NHibernate,ibaties,Dapper、PetaPOCO...等,都是基于ORM思想。
首先介绍下O/R Mapping(ORM)
1.什么是ORM?ORM指的是面向对象的对象模型和关系数据库的数据结构之间的相互转化,可以理解为把表实体和表相互转化(在任何平台都适用,如php,java等)。
传统ADO.net操作数据库:
基于ORM思想操作数据库:
接下来我们就一步步创建项目:
这里我是用的vs2012 默认装的是EF5.0,如果你机子没有博客园搜下如何安装,这里就不介绍了,
首先我们新建一个项目,在项目中添加新建项如下图:
点击添加下图:
我们这选择从数据库生成:
这里我们点击新建连接:
选择完毕之后点确定:
这里一定要设置"是",你可以点下"否"看看实体链接字符串跟"是"有什么区别,点击下一步:
点击完成,就OK了,根据数据库生成的实体如下图:
看下解决方案管理器中都生成了什么文件:
那么我们打开DataModel.Context.cs看下里面的内容:
我们简单的写个CRUD:
1.添加
//1.声明一个EF的上下文 DemoTestEntities dbContext= new DemoTestEntities(); //2.声明一个实体 UserInfo userInfo = new UserInfo(); userInfo.Age = 18; //3.告诉EF对上面的实体进行添加操作aa dbContext.UserInfo.Add(userInfo); //4.告诉上下文把实体的变化保存到数据库里面去 dbContext.SaveChanges();
2.查询
static void Main(string[] args) { //查询操作 DemoTestEntities dbContext = new DemoTestEntities(); List<UserInfo> list = dbContext.UserInfo.Where(u => u.Name == "小贱").ToList(); list.ForEach(u => Console.WriteLine(u.ToString())); Console.ReadKey(); } public partial class UserInfo { public override string ToString()//重写tostring() { return this.Age + "," + this.Name; } }
3.修改
static void Main(string[] args) { //修改操作 DemoTestEntities dbContext = new DemoTestEntities(); UserInfo userInfo = new UserInfo(); userInfo.Name = "小贱"; userInfo.Age = 20; userInfo.UserId = 1;//修改删除的时候必须指定id //告诉上下文对此实体做修改操作 dbContext.Entry<UserInfo>(userInfo).State = System.Data.EntityState.Modified; //修改数据库某一列中的数据 //dbContext.Entry<UserInfo>(userInfo).Property<string>(u => u.Name).IsModified = true; //修改数据库某一列中的数据第二种写法 //dbContext.Entry<UserInfo>(userInfo).State = System.Data.EntityState.Unchanged; //dbContext.Entry<UserInfo>(userInfo).Property("Name").IsModified = true; dbContext.SaveChanges(); }
4.删除
static void Main(string[] args) { //删除操作 DemoTestEntities dbContext = new DemoTestEntities(); UserInfo userInfo = new UserInfo(); userInfo.Name = "小贱"; userInfo.Age = 20; userInfo.UserId = 1;//修改删除的时候必须指定id //告诉上下文对此实体做删除操作 dbContext.Entry<UserInfo>(userInfo).State = System.Data.EntityState.Deleted; dbContext.SaveChanges(); }