您的位置:首页 > 其它

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));
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: