.NET Entity Framework基本使用方法
生成模型


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基本使用方法的更多相关文章
- Entity Framework 与 面向对象
说要分享,我了个*,写了一半放草稿箱了两个星期都快发霉了,趁着周末写完发出来吧. 文章分为五部分: 基础.类讲述的是用到的一些EF与面向对象的基础: 业务是讲怎么划分设计业务: 设计模式和工作模式讲述 ...
- [ASP.NET MVC 小牛之路]06 - 使用 Entity Framework
在家闲着也是闲着,继续写我的[ASP.NET MVC 小牛之路]系列吧.在该系列的上一篇博文中,在显示书本信息列表的时候,我们是在程序代码中手工造的数据.本文将演示如何在ASP.NET MVC中使用E ...
- Entity Framework Code First实体对象变动跟踪
Entity Framework Code First通过DbContext.ChangeTracker对实体对象的变动进行跟踪,实现跟踪的方式有两种:变动跟踪快照和变动跟踪代理. 变动跟踪快照:前面 ...
- 使用 Entity Framework
ORM 和 EF 当我们要开发一个应用程序,就要考虑怎样展示数据,怎样持久化数据.考虑这个问题时我们所要关心的东西,最重要的莫过于程序的性能.开发的简易性和代码的可维护.可扩展性. 持久化(Persi ...
- 使用 Entity Framework Code First
使用 Entity Framework Code First 在家闲着也是闲着,继续写我的[ASP.NET MVC 小牛之路]系列吧.在该系列的上一篇博文中,在显示书本信息列表的时候,我们是在程序代码 ...
- MVC中使用Entity Framework 基于方法的查询学习笔记 (一)
EF中基于方法的查询方式不同于LINQ和以往的ADO.NET,正因为如此,有必要深入学习一下啦.闲话不多说,现在开始一个MVC项目,在项目中临床学习. 创建MVC项目 1.“文件”--“新建项目”-- ...
- 《Entity Framework 6 Recipes》中文翻译系列 (23) -----第五章 加载实体和导航属性之预先加载与Find()方法
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 5-2 预先加载关联实体 问题 你想在一次数据交互中加载一个实体和与它相关联实体. ...
- 《Entity Framework 6 Recipes》中文翻译系列 (26) ------ 第五章 加载实体和导航属性之延缓加载关联实体和在别的LINQ查询操作中使用Include()方法
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 5-7 在别的LINQ查询操作中使用Include()方法 问题 你有一个LINQ ...
- entity framework 删除数据库出现错误的解决方法--最土但是很有效的方法
无法删除数据库,因为该数据库当前正在使用. public ChinaerContext() : base("name=ContextConn") { // Database.Set ...
随机推荐
- CSS3中的浮动
一.标准文档流:指元素根据块元素或行内元素的特性按从上到下,从左到右的方式自然排列.这也是元素默认的排列方式 二.display属性 display:更改块级元素和行内元素的相互转换 ...
- java特殊抽象类-接口
- matrix_chain_order
to calculate the min step of multiplicate some matixs package dynamic_programming; public class matr ...
- cython 成功创建import 模块
又是因为别人代码里有这么一个部分,用到了cython,,简而言之,就是利用这个模块调用C语言,从而加速程序运行,其中具体怎么调用我还没整清楚,但基本用法差不多了解了. 1 安装:https://www ...
- s21day08 python笔记
s21day08 python笔记 一.现阶段所有内容回顾 以后把每天的笔记直接补充到python学习 二.进制 对于计算机而言无论是文件存储 / 网络传输输入本质上都是:二进制(0101010101 ...
- 一个页面从输入url到加载完成的过程都发生了什么,请详细说明
1.首先,在浏览器地址栏中输入url 2.浏览器先查看浏览器缓存-系统缓存-路由器缓存,如果缓存中有,会直接在屏幕中显示页面内容.若没有,则跳到第三步操作 3.在发送http请求前,需要域名解析(DN ...
- CCF-权限查询-201612-3
这道题,开始只有10分.....原因是将false 写成了 flase 我要吐血而亡....关键是还debug了半天,以为是逻辑错了 不过亮点是代码很简洁,网上140+的代码看着真复杂 核心: 做题之 ...
- windows openssh server 安装试用
使用Windows的可能会知道win10 的已经包好了openssh 服务,但是对于其他机器win 7 windows 2008 ,就需要其他的方法了 还好powershell 团队开发了支持wind ...
- 子数组的最大异或和---Trie
异或的运算法则为:0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0(同为0,异为1),这些法则与加法是相同的,只是不带进位,所以异或常被认作不进位加法. 前缀树详解:https://www.cnblog ...
- spotlight工具监控oracle
spotlight工具版本Version: 5.0.1.1022 安装步骤 安装完成 安装之后,桌面上会生成如下图标 双机此图标,输入License 输入激活码 点击close,再次查看 建立连接,监 ...