一,对比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的语句简化查询。