隐藏

asp.net mvc ef更新部分数据或列

发布:2023/12/7 15:22:20作者:大数据 来源:大数据 浏览次数:487

ASP.NET MVC EF直接更新数据(不需查询)

EF(EntityFrameWork) ORM(对象关系映射框架/数据持久化框架),根据实体对象操作数据表中数据的一种面向对象的操作框架,底层也是调用ADO.NET

ASP.NET MVC 项目会自动导入MVC程序集,因为默认.NET环境(GAC)中没有这个程序集

1: EF数据上下文 继承于 DbContext ; DBQuery<T> ,支持延迟加载:只有当使用到数据的时候,才去查询数据库; 主要成员:表映射的实体集合 Set<T>,Entry<T>()

context.Model -->Dbset<Model>

context.set<Model>() -->Dbset<Model>

//使用状态版的时候,执行修改/删除的时候必须指定主键。

2: EF中会为每个 管理的 实体对象 创建一个代理包装类对象,其中会跟踪 实体对象 的状态和每个属性的状态;

3: [EF对象管理容器]每个通过EF数据上下文操作的实体对象,都需要存在上下文的容器中,一旦通过上下文的某个方法操作了实体对象后,那么上下文就会给它加一个状态标识。

但调用上下文的SaveChanges方法的时候,上下文就会遍历容器中的所有对象,并检查他们的状态标识,并依照标识的值进行相应的增删改查sql操作

 

一、通常使用EF更新的方式,先查询出要修改的数据,然后再修改新的值;

实体对象被修改的属性 在 代理包装类对象里 的对应属性状态会被修改记录下修改状态,等到调用SaveChanges时,EF会遍历其管理的每个实体对象,并根据其 包装类对象 的状态,生成增删改查sql语句并执行;

此例中修改操作,会生成 修改的sql语句(注意:此处只为修改过的属性生成sql语句),最后执行。

 create SQL

二、为避免先查询数据库,可以直接将 被修改的实体对象 添加到 EF中管理(此时为附加状态Attached),并手动设置其为未修改状态(Unchanged),同时设置被修改的实体对象的包装类对象 对应属性为修改状态。

 下面update2和3是一个意思

EF其他操作(多表增加操作/导航属性):

 EF(方法/状态/多表操作/导航属性)整体测试代码

参考文章:

ASP.NET EF(LINQ/Lambda查询):http://www.cnblogs.com/Dr-Hao/p/5356928.html

ASP.NET EF 使用LinqPad 快速学习Linq:http://www.cnblogs.com/Dr-Hao/p/5357112.html

Ps:ViewBag,ViewData,TempData区别?

ViewBag 和 ViewData 数据"共享",作用域为 当前 Action。

TempData 作用域跨 Action。

code write the life, programe change the world
声明:本站内容来源于原创和互联网,尊重作者版权,转载请注明来源网址,欢迎收藏,谢谢!