.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 ...
随机推荐
- CodeForces - 589A (STL容器的使用)
Polycarp has quite recently learned about email aliases. Of course, he used to suspect that the case ...
- Java学习笔记36(jdbc快速入门)
JDBC: Java DataBase Connectivity 是java程序连接存取数据库的应用程序接口 (是sun公司的程序员定义的一套操作数据库的规则,然后下面的各个公司如:mysql,sql ...
- 环境搭建、RF库
一.Python27安装 1.双击安装python-2.7.13-64位.msi 2.检查python:cmd命令行→[python]→回车,出现如图所示,表示成功 可能出现:'python'不是内部 ...
- Dubbo的Filter实战--整合Oval校验框架
前言: 其实很早之前就想写一篇关于oval和具体服务相整合的常见做法, 并以此作为一篇笔记. 趁现在项目中间空闲期, 刚好对dubbo的filter有一些了解. 因此想结合两者, 写一下既结合校验框架 ...
- node.js创建简单服务测试请求数据
工具:安装node: 1,创建文件夹 server, 2 ,在server文件夹下分别创建server.js 和 package.json 文件 3,server.js 代码: var express ...
- 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 ...
- Linux内核分析第二次作业
这周学习了<庖丁解牛Linux内核分析>并且学习了实验楼的相关知识. 在实验楼的虚拟环境下编写代码: 通过gcc编译后,使用查看文件命令:cat -n 20189223.c 在vim中, ...
- MySQL:System.Data.Entity ,MySqlCommand, MySqlParameter and "LIKE" %
Introduction Using GetSqlStringCommand with a text comparative, with LIKE, in ADO.NET and the MySQLP ...
- TreeSet的两种排序方式,含Comparable、Comparator
1.排序的引入 由于TreeSet可以实现对元素按照某种规则进行排序,例如下面的例子 public class TreeSetDemo { public static void main(String ...
- PCB行业研究
PCB行业研究 PCB产业上下游 关于HDI电路板 主要用于手机行业,对电路板面积有严格要求. 啥时候铜材料上涨