作者的话:
很实用的一篇文章,搭建架构的底层代码!全面解析!
EF访问数据库,我给他分为3大类:
- EF增删改查
- Linq to EF查询
- Lambda查询
其中EF增删改查不是延迟加载,会直接加载到内存,对于数据较大时不建议使用
Linq to EF查询,Lambda查询很好的解决了这个问题,属于延迟加载,并且也可以取消延迟加载,Linq to EF查询对于新手非常友好,特别好学!
1.EF增删改查
EF添加:
//1.声明/创建一个上下文对象,DataModelContainer在Model层下,所以添加对其的引用
DataModelContainer dbContent = new DataModelContainer();
//2.创建一个实体user
UserInfo user = new UserInfo();
user.UName = "zs";
user.Pwd = "123";
user.ShowName = "张三";
//3.告诉EF上下文要对上面的实体做插入操作
dbContent.UserInfo.Add(user);
//4.告诉EF上下文把实体的变化保存到数据库里去
dbContent.SaveChanges();
Console.ReadKey();
//也可以使用第二种方法,便于和其他方法学习:
//也可以使用第二种方法,便于和其他方法学习:
//也可以使用第二种方法,便于和其他方法学习:
//1.声明/创建一个上下文对象,DataModelContainer在Model层下,所以添加对其的引用
DataModelContainer dbContent = new DataModelContainer();
//2.创建一个实体user
UserInfo user = new UserInfo();
user.UName = "ls";
user.Pwd = "123456";
user.ShowName = "李四";
//3.告诉EF上下文要对上面的实体做插入操作,
dbContent.UserInfo.Attach(user);//将给定的实体附加到上下文中
//dbContent.Entry<UserInfo>(user).State = System.Data.EntityState.Added;//EF5.0
//还要添加对System.Data.Entity.dll的引用
dbContent.Entry<UserInfo>(user).State = System.Data.Entity.EntityState.Added;//EF6.0
// 导入System.Data.Entity命名空间,那么前缀可以不写
//4.告诉EF上下文把实体的变化保存到数据库里去
dbContent.SaveChanges();
//注意:运行测试前还要把Model层下的App.Config复制替换EFDemo下的App.Config(因为要知道如何连接数据库)
Console.WriteLine("ok");
Console.ReadKey();
EF修改:
DataModelContainer dbContent = new DataModelContainer();
UserInfo user = new UserInfo();
user.Id = 1;
//主键必须给出,否则报错
//主键必须给出,否则报错
//主键必须给出,否则报错
user.UName = "ww";
user.Pwd = "123";
user.ShowName = "王五";
//泛型版本写法。这是修改所有字段
dbContent.Entry<UserInfo>(user).State = System.Data.Entity.EntityState.Modified;
//非泛型版本写法
//dbContent.Entry(user).State = System.Data.Entity.EntityState.Modified;
dbContent.SaveChanges();
Console.WriteLine("ok");
Console.ReadKey();
EF删除:
DataModelContainer dbContent = new DataModelContainer();
UserInfo user = new UserInfo();
user.Id = 1;
//主键必须给出,否则报错
//主键必须给出,否则报错
//主键必须给出,否则报错
dbContent.UserInfo.Attach(user);
dbContent.UserInfo.Remove(user);
dbContent.SaveChanges();
Console.WriteLine("ok");
Console.ReadKey();
//也可以使用第二种方法,便于和其他方法学习:
//也可以使用第二种方法,便于和其他方法学习:
//也可以使用第二种方法,便于和其他方法学习:
DataModelContainer dbContent = new DataModelContainer();
UserInfo user = new UserInfo();
user.Id = 2;
//主键必须给出,否则报错
//主键必须给出,否则报错
//主键必须给出,否则报错
dbContent.Entry<UserInfo>(user).State = System.Data.Entity.EntityState.Deleted;
dbContent.SaveChanges();
Console.WriteLine("ok");
Console.ReadKey();
EF查询:
DataModelContainer dbCotent = new DataModelContainer();
foreach (var user in dbCotent.UserInfo)
{
Console.WriteLine(user.Id+" "+user.UName);
}
Console.ReadKey();
2.Linq to EF查询:
DataModelContainer dbCotent = new DataModelContainer();
//linq查询是一种高效查询,执行时会先执行where条件过滤出符合条件的数据,而不是先查询出所有数据再过滤,在数据库端就过滤了
//linq查询返回值是IQuerable<UserInfo>类型,一种接口集合
//IQueryable<UserInfo > temp = from u in dbCotent.UserInfo 与下面一句等效
var temp = from u in dbCotent.UserInfo
where u.Id > 5
select u;
//因此查询出来的temp就是一个IQueryable集合,里面装的UserInfo类型数据
foreach (var user in temp)
{
Console.WriteLine(user.Id + " " + user.UName);
}
Console.ReadKey();
3.Lambda to EF查询:
DataModelContainer dbContent = new DataModelContainer();
//var data = dbContent.UserInfo.Where(u => u.Id > 5);
//返回值类型也为IQueryable
IQueryable<UserInfo> data = dbContent.UserInfo.Where(u => u.Id > 5);
foreach (var user in data)
{
Console.WriteLine(user.Id+" "+user.UName);
}
Console.ReadKey();
感谢阅读!