生成模型

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. kvm恢复和删除快照

    使用文件快照的方式实现文件备份,但单说快照(snapshot)的话,他是某一时间点(版本)你能看到的该时间点备份文件状态的全貌,通过文件的快照(全貌)你能恢复到特定时间点(版本)的文件状态. 创建虚拟 ...

  2. Java的基本数据类型大小及其包装类

     Java的基本数据类型 变量就是申请内存来存储值.也就是说,当创建变量的时候,需要在内存中申请空间. 内存管理系统根据变量的类型为变量分配存储空间,分配的空间只能用来储存该类型数据. 因此,通过定义 ...

  3. Linux下命令行cURL的10种常见用法示例

    curl的命令行工具功能非常强大,这些数据交互的功能基本上都是通过URL方式进行的,下面这篇文章主要给大家分享了在Linux中命令行cURL的10种常见用法示例,通过示例代码介绍的非常详细,需要的朋友 ...

  4. list的相关函数

    # ### 列表相关的函数 # (1) append ''' 功能:向列表的末尾添加新的元素 格式:列表.append(值) 返回值:None 注意:新添加的值在列表的末尾,该函数直接操作原有列表 ' ...

  5. vscode 插件推荐 - 献给所有前端工程师(更新与2018.8.1)

    VScode现在已经越来越完善.性能远超Atom和webstorm,你有什么理由不用它?在这里,我会给你们推荐很多实用的插件,让你对 vscode 有更深刻的体会,渐渐地你就会知道它有多好用. 走马观 ...

  6. latex之矩阵表示

    $ \begin{matrix} 1 & 0 & 0\\ 0 & 1 & 0\\ 0 & 0 & 1 \end{matrix}\quad \begin{ ...

  7. A Language Modeling Approach to Predicting Reading Difficulty-paer

    Volume:Proceedings of the Human Language Technology Conference of the North American Chapter of the ...

  8. 软件工程第四次作业 石墨文档IOS

    待分析的产品:石墨文档IOS客户端 作业地址: https://edu.cnblogs.com/campus/nenu/2016CS/homework/2505   第一部分 调研, 评测 1.下载并 ...

  9. hibernate---session查询

    一.hql语句查询(适合多表) public class MyTest { public static void main(String[] args) { //查询集合 Session sessio ...

  10. CH5702 Count The Repetitions

    题意 5702 Count The Repetitions 0x50「动态规划」例题 描述 定义 conn(s,n) 为 n 个字符串 s 首尾相接形成的字符串,例如: conn("abc& ...