EF-EntityFrameWork中文名:实体框架(数据持久化框架)
2014-03-10 13:49
465 查看
一、 Linq to EF EF默认使用延迟加载
//数据上下文对象
Entities db = new Entities();
1.IQueryable<T>支持延迟加载,linq编译成SQO,运行时会生成一颗 表达式树 ,也就是说,IQueryable中没有保存查询的数据,而是保存了要查询的数据条件的表达式树
eg: IQueryable<Article> list = from a in db.Articles select a;
2.那么当使用IQueryable的时候(ToList,foreach遍历),才会通过 表达式树里的条件生成sql语句,并到数据库查询
3.如果使用了实体类中的外键属性, 那么ef会为其外键表查询数据
但是 ef已经做了优化:重复出现的外键实体 只查询一次
eg:
list.ToList().ForEach(a =>Console.WriteLine(a.AId+",标题:"+a.ATitle+",文章分类:"+a.ArticleCate.Name));
4.使用Include指定 内连接查询的外键实体,这样查询语句就会生成 链接查询(inner join)
eg:
IQueryable<Article> list = db.Articles.Include("ArticleCate").Include("User");
list.ToList().ForEach(a=>Console.WriteLine(a.AId+",标题:"+ a.ATitle +",文章分类:" + a.ArticleCate.Name + ",作者:"+a.User.CnName));
5.删除
a.先查询,然后标记删除,最后保存saveChange删除 (可批量操作,节约资源)
eg:
var list = from a in db.BlogArticles where a.AId == 71 select a;
Article article = list.FirstOrDefault();
db.Articles.Remove(article);
db.SaveChanges();//执行:使用 SaveChanges执行 增删改的 操作(可批量操作,节约连接资源)
MessageBox.Show("删除成功~~!");
b.直接附加删除entry---
int id=20;
Article article=new Article(){Aid=id};
db.Entry<Models.UserOfRole>(r).State = System.Data.EntityState.Deleted;
db.SaveChanges();
MessageBox.Show("删除成功~~!");
c.批量删除
string[] oid = pid.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
for (int i = 0; i < oid.Length; i++)
{
id = Convert.ToInt32(oid[i]);
}
//++++++++++++++++++
var list= (from c in en.Coursewares where c.Courseware_classid == id select c).ToList();
foreach (var item in list)
{
en.Entry<Models.Courseware>(item).State = System.Data.EntityState.Deleted;
}
6.修改:
a.先查再改
//1.查询出 一个文章对象
Article model = (from a in db.Articles where a.AId == 69 select a).FirstOrDefault();
//2.设置要修改的字段
model.ATitle = "标题~~~~!1";
model.AContent = "我是内容哦~~!!!!!!!!!!";
//3.执行修改
db.SaveChanges();
MessageBox.Show("修改成功~~!");
b.先附加再修改,附加的时候需将所有的字段都赋值,然后附加attach
//1.成功~~~~~~~~~~~~~
ArticleCate cate = new ArticleCate() { Id = 2 };
//附加到上下文中
db.ArticleCates.Attach(cate);
//设置修改的新值
cate.Name = "123";
db.SaveChanges();
//+++++++++++++++++++++++++++++++++++++++++++++
DbEntityEntry<Models.BaseUser_Info> entry = db.Entry(model);
entry.Property("Login_Name").IsModified = true;
entry.Property("E_mail").IsModified = true;
entry.Property("Phone").IsModified = true;
entry.Property("Parent_Id").IsModified = true;
entry.Property("Department_Name").IsModified = true;
entry.Property("Remark").IsModified = true;
List<Models.UserOfRole> roleof= (from a in dbbase.UserOfRoles where a.User_Id==model.BaseUser_Id select a).ToList();
foreach (var item in roleof)
{
db.Entry<Models.UserOfRole>(item).State = System.Data.EntityState.Deleted;
}
db.SaveChanges();
7.新增
//创建实体对象
ArticleCate cate = new ArticleCate()
{
Name = "123!",
Remark = "123~~!",
Author = 2,
Statu = 4,
Addtime = DateTime.Now
};
//新增到上下文中,并标记为新增状态
db.ArticleCates.Add(cate);
//更新到数据库
db.SaveChanges();
MessageBox.Show("成功啦~");
8.分页
//1.获取页码
int pageIndex = int.Parse(txtPage.Text.Trim());
//2.页容量
int pageSize = 5
db.Articles.OrderBy(a=>a.AId).Skip((pageIndex-1)*pageSize).Take(pageSize).ToList().ForEach(a => Console.WriteLine(a.AId + "," + a.ATitle));
//数据上下文对象
Entities db = new Entities();
1.IQueryable<T>支持延迟加载,linq编译成SQO,运行时会生成一颗 表达式树 ,也就是说,IQueryable中没有保存查询的数据,而是保存了要查询的数据条件的表达式树
eg: IQueryable<Article> list = from a in db.Articles select a;
2.那么当使用IQueryable的时候(ToList,foreach遍历),才会通过 表达式树里的条件生成sql语句,并到数据库查询
3.如果使用了实体类中的外键属性, 那么ef会为其外键表查询数据
但是 ef已经做了优化:重复出现的外键实体 只查询一次
eg:
list.ToList().ForEach(a =>Console.WriteLine(a.AId+",标题:"+a.ATitle+",文章分类:"+a.ArticleCate.Name));
4.使用Include指定 内连接查询的外键实体,这样查询语句就会生成 链接查询(inner join)
eg:
IQueryable<Article> list = db.Articles.Include("ArticleCate").Include("User");
list.ToList().ForEach(a=>Console.WriteLine(a.AId+",标题:"+ a.ATitle +",文章分类:" + a.ArticleCate.Name + ",作者:"+a.User.CnName));
5.删除
a.先查询,然后标记删除,最后保存saveChange删除 (可批量操作,节约资源)
eg:
var list = from a in db.BlogArticles where a.AId == 71 select a;
Article article = list.FirstOrDefault();
db.Articles.Remove(article);
db.SaveChanges();//执行:使用 SaveChanges执行 增删改的 操作(可批量操作,节约连接资源)
MessageBox.Show("删除成功~~!");
b.直接附加删除entry---
int id=20;
Article article=new Article(){Aid=id};
db.Entry<Models.UserOfRole>(r).State = System.Data.EntityState.Deleted;
db.SaveChanges();
MessageBox.Show("删除成功~~!");
c.批量删除
string[] oid = pid.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
for (int i = 0; i < oid.Length; i++)
{
id = Convert.ToInt32(oid[i]);
}
//++++++++++++++++++
var list= (from c in en.Coursewares where c.Courseware_classid == id select c).ToList();
foreach (var item in list)
{
en.Entry<Models.Courseware>(item).State = System.Data.EntityState.Deleted;
}
6.修改:
a.先查再改
//1.查询出 一个文章对象
Article model = (from a in db.Articles where a.AId == 69 select a).FirstOrDefault();
//2.设置要修改的字段
model.ATitle = "标题~~~~!1";
model.AContent = "我是内容哦~~!!!!!!!!!!";
//3.执行修改
db.SaveChanges();
MessageBox.Show("修改成功~~!");
b.先附加再修改,附加的时候需将所有的字段都赋值,然后附加attach
//1.成功~~~~~~~~~~~~~
ArticleCate cate = new ArticleCate() { Id = 2 };
//附加到上下文中
db.ArticleCates.Attach(cate);
//设置修改的新值
cate.Name = "123";
db.SaveChanges();
//+++++++++++++++++++++++++++++++++++++++++++++
DbEntityEntry<Models.BaseUser_Info> entry = db.Entry(model);
entry.Property("Login_Name").IsModified = true;
entry.Property("E_mail").IsModified = true;
entry.Property("Phone").IsModified = true;
entry.Property("Parent_Id").IsModified = true;
entry.Property("Department_Name").IsModified = true;
entry.Property("Remark").IsModified = true;
List<Models.UserOfRole> roleof= (from a in dbbase.UserOfRoles where a.User_Id==model.BaseUser_Id select a).ToList();
foreach (var item in roleof)
{
db.Entry<Models.UserOfRole>(item).State = System.Data.EntityState.Deleted;
}
db.SaveChanges();
7.新增
//创建实体对象
ArticleCate cate = new ArticleCate()
{
Name = "123!",
Remark = "123~~!",
Author = 2,
Statu = 4,
Addtime = DateTime.Now
};
//新增到上下文中,并标记为新增状态
db.ArticleCates.Add(cate);
//更新到数据库
db.SaveChanges();
MessageBox.Show("成功啦~");
8.分页
//1.获取页码
int pageIndex = int.Parse(txtPage.Text.Trim());
//2.页容量
int pageSize = 5
db.Articles.OrderBy(a=>a.AId).Skip((pageIndex-1)*pageSize).Take(pageSize).ToList().ForEach(a => Console.WriteLine(a.AId + "," + a.ATitle));
相关文章推荐
- MVC之实体框架(数据持久化框架)EntityFrameWork(EF)
- ASP EF框架,实体框架(EntityFramework),ModelFirst,导航属性(一对多的表关系,外键)
- EF实体框架数据操作接口
- EF(EntityFramework)与mysql使用,取数据报错,linq实体映射错误
- ASP EF框架,实体框架(EntityFramework),DataBaseFirst
- EF实体框架数据操作接口(转)
- EF实体框架数据操作基类(转)
- EF实体框架模型使用Linq获取数据库数据
- EF实体框架数据操作基类
- 用MyBatis框架进行数据的持久化处理
- ASP.NET MVC学习---(一)ORM框架,EF实体数据模型简介
- 原创:MVC 5 实例教程(MvcMovieStore 新概念版:mvc5.0,EF6.01) - 4、创建数据上下文和数据实体模型
- ADO.net实体框架访问不到数据库最新数据问题
- 【EF 1】EF实体框架 原理+实例
- 您的项目引用了最新实体框架;但是,找不到数据链接所需的与版本兼容的实体框架数据库 EF6使用Mysql的技巧
- 几种.NET平台数据持久化框架介绍
- iOS-数据持久化-第三方框架FMDB的使用
- C# MVC EF框架生成存储过程实体框架报错解决
- 技术(1)EF实体框架(二)延迟加载
- 【MVC 1】MVC+EF实体框架—原理解析