生成模型

EF有两种查询方式,Linq查询 、Lambda表达式

            //普通查询 Linq 方式
IQueryable<Book> list = from b in db.Set<Book>()
where b.BookId > && b.TypeId ==
select b;
//普通查询 Lambda 方式
IQueryable<Book> list1 = db.Set<Book>()
.Where(b => b.BookId > && b.TypeId == );

联结查询(Join)

            //多表查询 Linq
var list = from book in db.Set<Book>()
join bookType in db.Set<BookType>()
on book.TypeId equals bookType.TypeId
select new
{
book
}; //多表查询 lambda
var list = db.Set<Book>()
.Where(u => u.BookId > && u.TypeId == )
.Join(db.Set<BookType>(), book => book.TypeId, tp => tp.TypeId, (book, tp) => new { book, tp });

分页查询

            //延迟加载 使用时才查询数据库  没用一次就查一次
IQueryable<Book> list = db.Set<Book>()
.OrderByDescending(u => u.BookId) //IQueryable对象中Expression方法默认将Lambda表达式转换成Expression对象
.Skip()
.Take(); //不具备延迟加载,因为IEnumerable没有方法去拼接完整sql语句
IEnumerable<Book> list1 = db.Set<Book>()
.AsEnumerable() //把结果强转成 IEnumerable 类型
.OrderByDescending(u => u.BookId)
.Skip()
.Take();

分组查询(Group)

  

联结两张表 然后根据 TypeName 进行分组,统计各分组下对应的数量

#原生sql
select b.TypeName,count(*) as total from TestDB.dbo.Book as a left join TestDB.dbo.BookType as b on a.TypeId = b.TypeId group by b.TypeName
        //对应 lambda 表达式
public IQueryable<object> getBookTypeWithQuantity()
{
IQueryable<object> list = this.db.Set<Book>().Join(db.Set<BookType>(), b => b.TypeId, tp => tp.TypeId, (b, tp) => new { b, tp })
.GroupBy(a => new { a.tp.TypeName })
.Select(group => new { TypeName = group.Key, Total = group.Count() }); return list;
}

上面  getBookTypeWithQuantity 方法返回一个匿名对象的集合

控制器中使用

            IQueryable<dynamic> list = bll.getBookTypeWithQuantity();
foreach (var item in list)
{
//这里会报错 “object”未包含“TypeName”的定义
item.TypeName.ToString();
}
            string json = JsonConvert.SerializeObject(bll.getBookTypeWithQuantity());
var list = JsonConvert.DeserializeObject<dynamic>(json);
//BookTypes视图模型 包含TypeName 和 Total 两个字段
List<BookTypes> types = new List<BookTypes>();
foreach (var item in list)
{
BookTypes obj = new BookTypes();
obj.TypeName = item.TypeName.ToString();
obj.Total = (int)item.Total;
types.Add(obj);
}

增加数据

        [HttpPost]
public ActionResult Add(Book book)
{
DbContext db = new DbModel();
db.Set<Book>().Add(book);
//返回受影响行数
if(db.SaveChanges() > )
{
return Json(new
{
msg = "添加成功"
});
}else
{
return Json(new
{
msg = "添加失败"
});
}
}

修改数据

        [HttpPost]
public ActionResult Edit(Book bb) {
DbContext db = new DbModel();
//将对象附加到上下文 状态设置为未更改
db.Set<Book>().Attach(bb);
db.Entry(bb).State = EntityState.Modified;
db.SaveChanges();
return Json(new
{
msg = "修改成功"
});
}  

删除数据

        public ActionResult Delete(int id) {
DbContext db = new DbModel();
Book book = db.Set<Book>().FirstOrDefault(b => b.BookId == id);
db.Set<Book>().Remove(book);
db.SaveChanges();
return Json(new
{
msg = "删除成功"
},JsonRequestBehavior.AllowGet);
}

.NET Entity Framework基本使用方法的更多相关文章

  1. Entity Framework 与 面向对象

    说要分享,我了个*,写了一半放草稿箱了两个星期都快发霉了,趁着周末写完发出来吧. 文章分为五部分: 基础.类讲述的是用到的一些EF与面向对象的基础: 业务是讲怎么划分设计业务: 设计模式和工作模式讲述 ...

  2. [ASP.NET MVC 小牛之路]06 - 使用 Entity Framework

    在家闲着也是闲着,继续写我的[ASP.NET MVC 小牛之路]系列吧.在该系列的上一篇博文中,在显示书本信息列表的时候,我们是在程序代码中手工造的数据.本文将演示如何在ASP.NET MVC中使用E ...

  3. Entity Framework Code First实体对象变动跟踪

    Entity Framework Code First通过DbContext.ChangeTracker对实体对象的变动进行跟踪,实现跟踪的方式有两种:变动跟踪快照和变动跟踪代理. 变动跟踪快照:前面 ...

  4. 使用 Entity Framework

    ORM 和 EF 当我们要开发一个应用程序,就要考虑怎样展示数据,怎样持久化数据.考虑这个问题时我们所要关心的东西,最重要的莫过于程序的性能.开发的简易性和代码的可维护.可扩展性. 持久化(Persi ...

  5. 使用 Entity Framework Code First

    使用 Entity Framework Code First 在家闲着也是闲着,继续写我的[ASP.NET MVC 小牛之路]系列吧.在该系列的上一篇博文中,在显示书本信息列表的时候,我们是在程序代码 ...

  6. MVC中使用Entity Framework 基于方法的查询学习笔记 (一)

    EF中基于方法的查询方式不同于LINQ和以往的ADO.NET,正因为如此,有必要深入学习一下啦.闲话不多说,现在开始一个MVC项目,在项目中临床学习. 创建MVC项目 1.“文件”--“新建项目”-- ...

  7. 《Entity Framework 6 Recipes》中文翻译系列 (23) -----第五章 加载实体和导航属性之预先加载与Find()方法

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 5-2  预先加载关联实体 问题 你想在一次数据交互中加载一个实体和与它相关联实体. ...

  8. 《Entity Framework 6 Recipes》中文翻译系列 (26) ------ 第五章 加载实体和导航属性之延缓加载关联实体和在别的LINQ查询操作中使用Include()方法

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 5-7  在别的LINQ查询操作中使用Include()方法 问题 你有一个LINQ ...

  9. entity framework 删除数据库出现错误的解决方法--最土但是很有效的方法

    无法删除数据库,因为该数据库当前正在使用. public ChinaerContext() : base("name=ContextConn") { // Database.Set ...

随机推荐

  1. CodeForces - 589A (STL容器的使用)

    Polycarp has quite recently learned about email aliases. Of course, he used to suspect that the case ...

  2. Java学习笔记36(jdbc快速入门)

    JDBC: Java DataBase Connectivity 是java程序连接存取数据库的应用程序接口 (是sun公司的程序员定义的一套操作数据库的规则,然后下面的各个公司如:mysql,sql ...

  3. 环境搭建、RF库

    一.Python27安装 1.双击安装python-2.7.13-64位.msi 2.检查python:cmd命令行→[python]→回车,出现如图所示,表示成功 可能出现:'python'不是内部 ...

  4. Dubbo的Filter实战--整合Oval校验框架

    前言: 其实很早之前就想写一篇关于oval和具体服务相整合的常见做法, 并以此作为一篇笔记. 趁现在项目中间空闲期, 刚好对dubbo的filter有一些了解. 因此想结合两者, 写一下既结合校验框架 ...

  5. node.js创建简单服务测试请求数据

    工具:安装node: 1,创建文件夹 server, 2 ,在server文件夹下分别创建server.js 和 package.json 文件 3,server.js 代码: var express ...

  6. move UVs of a texture

    Go to the material options on the left, and use a Custom UV. Create a vector parameter, use it to sc ...

  7. Linux内核分析第二次作业

    这周学习了<庖丁解牛Linux内核分析>并且学习了实验楼的相关知识. 在实验楼的虚拟环境下编写代码: 通过gcc编译后,使用查看文件命令:cat  -n 20189223.c 在vim中, ...

  8. MySQL:System.Data.Entity ,MySqlCommand, MySqlParameter and "LIKE" %

    Introduction Using GetSqlStringCommand with a text comparative, with LIKE, in ADO.NET and the MySQLP ...

  9. TreeSet的两种排序方式,含Comparable、Comparator

    1.排序的引入 由于TreeSet可以实现对元素按照某种规则进行排序,例如下面的例子 public class TreeSetDemo { public static void main(String ...

  10. PCB行业研究

    PCB行业研究 PCB产业上下游 关于HDI电路板 主要用于手机行业,对电路板面积有严格要求. 啥时候铜材料上涨