EntityFramework 学习 一 Persistence in Entity Framework

实体框架的持久化

当用EntityFramework持久化一个对象时,有两种情形:连接的和断开的

1.连接场景:使用同一个context上下文从数据库中查询和持久化实体时,查询和持久化实体期间,context不会被销毁

2.断开场景:实体的查询和保存提交使用不同的context上下文

上图所示,context1查询数据库中的实体然后被销毁,当实体变化时,应用程序使用context2来提交

这种情形是复杂的,因为新的context上下文不知道实体的变化,所以你不得不通知上下文。

CRUD Operation in Connected Scenario:连接状态下的CRUD操作

using (var context = new SchoolDBEntities())
{
    var studentList = context.Students.ToList<Student>();

    //Perform create operation
    context.Students.Add(new Student() { StudentName = "New Student" });

    //Perform Update operation
    Student studentToUpdate = studentList.Where(s => s.StudentName == "student1").FirstOrDefault<Student>();
    studentToUpdate.StudentName = "Edited student1";

    //Perform delete operation
    context.Students.Remove(studentList.ElementAt<Student>(0));

    //Execute Inser, Update & Delete queries in the database
    context.SaveChanges();
} 

注意:如果

context.Configuration.AutoDetectChangesEnabled = false

如果该属性设置为false,context不能检测到存在实体的变化,所以不能执行更新操作,你不得不在调用SaveChanges()之前调用context.ChangeTracker.DetectChanges()

当addingdeleting在DBSet上操作实体时,上下文检测这些操作,如果在分离的集合或list上进行这些操作,上下文将不检测这些变化

using (var context = new SchoolDBEntities())
{
    var studentList = context.Students.ToList<Student>();

    //Add student in list
    studentList.Add(new Student() { StudentName = "New Student" });

    //Perform update operation
    Student studentToUpdate = studentList.Where(s => s.StudentName == "Student1").FirstOrDefault<Student>();
    studentToUpdate.StudentName = "Edited student1";

    //Delete student from list
    if (studentList.Count > 0)
        studentList.Remove(studentList.ElementAt<Student>(0));

    //SaveChanges will only do update operation not add and delete
    context.SaveChanges();
}

总结:

context.Configuration.AutoDetectChangesEnabled = false如果在
context.SaveChanges();之前不调用context.ChangeTracker.DetectChanges()  则实体的更新操作不发送到数据库中运行更新,不过实体的删除和添加都会发送到数据库中运行

如果Add 和 delete不在DbSet上操作,则不会在数据库中添加删除实体,而仅仅在数据库中更新实体
时间: 2024-10-06 22:45:04

EntityFramework 学习 一 Persistence in Entity Framework的相关文章

Entity Framework学习(一) - Entity Framework Add and Attach and Entity States

Entity Framework Add and Attach and Entity States Entity Framewokr 新增.附加.实体状态 This topic will cover how to add and attach entities to a context and how Entity Framework processes these during SaveChanges. Entity Framework takes care of tracking the s

Entity Framework学习(二) - Entity Framework Automatic Detect Changes

When using most POCO entities the determination of how an entity has changed (and therefore which updates need to be sent to the database) is handled by the Detect Changes algorithm. Detect Changes works by detecting the differences between the curre

Entity Framework 6 学习笔记2 — 增、删、改、显示简单代码示例

前言 通过 “Entity Framework 6 学习笔记1 — 介绍和安装方法”文章我相信大家对EF的安装应该没什么问题了,整体安装还是比较简单的,只需要通过Nuge搜索EF然后安装就可以了,这也体现了微软一贯原则–“简单”. 安装完了我想很多朋友也着急想体验下EF的好处了吧,今天我就通过EF框架对增.删.改操作做一个简单示例. 创建表 这里我只是做示例所以就创建了一个表并且字段也很少.下面是sql语句,大家可以直接复制生成表结构.   CREATE TABLE Book   (   Id

Asp.Net MVC4开发二: Entity Framework在Asp.Net MVC4中的应用

ORM作为一种数据库访问机制已广泛地应用于各种项目当中,在.Net开发中,应用比较广泛的ORM框架大致有下面几个: 官方支持的有:Linq to SQL,Entity Framework.三方的有:NHibernate.前面介绍过Linq to SQL的应用,这篇介绍一下Entity Framework在Asp.Net MVC4中的应用. 首先用Visual Studio(2012或2013,其它版本需要安装Asp.Net MVC4)创建一个Asp.Net MVC4的项目,项目创建完成后会发现E

全球首发免费的MySql for Entity Framework Core

from:http://www.1234.sh/post/pomelo-data-mysql?utm_source=tuicool&utm_medium=referral Source 源代码在GitHub中以MIT协议开源: Pomelo.Data.MySql Pomelo.EntityFrameworkCore.MySql Background 一时兴起,想实现.NET Core下的MySQL ADO层和与Entity Framework Core对接,同时也是非常鄙视某厂商借着目前Orac

SQLITE WITH ENTITY FRAMEWORK CODE FIRST AND MIGRATION

Last month I’ve a chance to develop an app using Sqlite and Entity Framework Code First. Before I started with this project, I thought everything will be easy because Sqlite and Entity Framework are both popular framework. Maybe I just need to instal

Entity Framework入门

最近对项目中应用的技术进行学习,学到Entity Framework这部分内容,马上被EF的魅力深深吸引了.现在开发者越来越关注如何加快开发效率,而EF无疑是值得我们开发者去学习的,它实际上是微软的ADO.NET的增强版本,是一个ORM框架.接下来就给大家简单介绍一下EF. 一.EF简单介绍 EF是一种ORM-对象关系映射(Object-RelationalMapping)框架,能够跟踪实体的变化,把我们在编程是使用的对象映射到底层的数据库结构. ORM--广义上说,指的是面对对象的对象模型和关

Entity Framework with MySQL 学习笔记一(安装)

声明 :  数据库是Mysql,本人的程度只到会写sql语句(不会储蓄过程), c# 会基本的ADO.NET数据库访问,LINQ基础. 这篇只做个人学习|温习作用. 新手可以参考,也请高手指正错误, 感恩. Entity Framework (缩写EF) 是微软的一个框架.作用是处理面向对象与关系数据库的映射问题. 以往我们都是ADO.NET来访问数据库,connection.open() -> sql command ->  executenonquery | dataReader ->

Entity Framework学习之创建Entity Framework数据模型

1.准备 Visual Studio 2013 .NET 4.5 Entity Framework 6 (EntityFramework 6.1.0 NuGet package) Windows Azure SDK 2.2 (可选) 2.Contoso University web应用程序 此应用程序允许用户 查看.更新student. course和instructor 信息: 网站UI样式是由内置模板生成的 3.新建MVC5 web应用程序 新建项目并命名为"ContosoUniversit