一,对比Linq to SQL
最近学了两个具有ORM思想的东西,一个是Linq to SQL ,另一个是EF。。。
学完之后总是从使用上感觉它们是一样的,后来自己查了查,统计了个表格:
各有优劣吧~~欢迎前来补充~~~~
二,EF实现简单增删改查
static void Main(string[] args) { #region 增加单个实体 using (var dbContext = new SecondChargeEntities())//先创建访问数据库的入口 { var mystudent = new T_StuInfo { StuNum = "01", StuCardNum = "01", StuName = "杰伦哥哥" }; //定义一个要增加的对象 dbContext.T_StuInfo.Add(mystudent);//增加 int result = dbContext.SaveChanges();//真正写入数据库 Console.WriteLine(result); //打印出1 } #endregion #region 查询单个实体 using (var dbContext = new SecondChargeEntities())//先创建访问数据库的入口 { var mystudent = dbContext.T_StuInfo.Find("01");//使用主键查找上下文跟踪的实体 Console.WriteLine(mystudent.StuName); //打印出学生姓名:杰伦哥哥 } #endregion #region 修改单个实体 using (var dbContext = new SecondChargeEntities())//先创建访问数据库的入口 { var mystudent = (from stu in dbContext.T_StuInfo where stu.StuName == "周杰伦" select stu).Single(); mystudent.StuName = "亲耐滴杰伦哥哥"; int result=dbContext.SaveChanges(); Console.WriteLine(result); //返回1 } #endregion #region 删除单个实体——使用Remorve方法 using (var dbContext = new SecondChargeEntities())//先创建访问数据库的入口 { var mystudent = (from stu in dbContext.T_StuInfo where stu.StuName == "令狐冲" select stu).SingleOrDefault(); dbContext.T_StuInfo.Remove(mystudent); //将实体标记为deleted int result = dbContext.SaveChanges(); //将更改保存到数据库 Console.WriteLine(result); //返回1 } #endregion //--------删除方法这样写可能有点儿效率问题: //要删除一个实体,只要知道它的id就ok了,但是上面 //的方法却要先加载这个实体到内存,这是个多余的步骤,下面我们使用attach方法 #region 删除单个实体——attach方法 using (var dbContext = new SecondChargeEntities())//先创建访问数据库的入口 { var mystudent =new T_StuInfo { StuNum ="01" }; dbContext.T_StuInfo.Attach(mystudent);//将实体以unchanged状态附加到上下文中 dbContext.T_StuInfo.Remove(mystudent ); //将实体标记为deleted int result= dbContext.SaveChanges(); //提交到时数据库 Console.WriteLine(result ); //打印出1 } #endregion #region 删除单个实体ExecuteSQLCommand方法 using (var dbcontext=new SecondChargeEntities()) { dbcontext.Database.ExecuteSqlCommand("delete from T_StuInfo where StuNum='3'"); } #endregion }
如上DEMO,我们还是主要使用DBContext这个类的变种来实现对数据库的操作,这个东西从功能上有点儿像SQLHelper,但是从原理上看,它们还是不一样滴。
这个上下文类利用底层的ADO.NET生成SQL代码实现对数据库的增删改查,相比以前的SQL语句,这种方法更易于写和调试,而且非常简单;并且在EF中,也可以使用linq的语句简化查询。