摘要:
CREATE PROCEDURE [dbo].[GetCoursesByStudentId] -- Add the parameters for the stored procedure here @StudentId int = null AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from... 阅读全文
摘要:
EntityFramework默认支持乐观并发 乐观并发中,实体加载后如果都没发生变化,ef保存该实体 首先,我们需要一个rowversion列为了控制student实体的并发问题,rowversion的数据类型为字节数组,rowversion像是自增id, rowversion的值在数据库当中自动 阅读全文
摘要:
使用主键属性 每个实体必须有主键 默认值的id属性值必须为0 在context2中,它不知道实体的状态, 只能通过实体的主键来判断实体的状态 如果主键为0,则是新的对象,不为0 就是修改 使用主键的好处有: 1.不需要多余的代码来决定实体的状态 2.良好的性能 不好的地方有 ; 1.每个实体都需要有 阅读全文
摘要:
//Create student in disconnected mode Student newStudent = new Student() { StudentName = "New Single Student" }; //Assign new standard to student entity newStudent.Standard = new Standar... 阅读全文
摘要:
Student studentToDelete; //1. Get student from DB using (var ctx = new SchoolDBEntities()) { studentToDelete = ctx.Students.Where(s => s.StudentName == "Student1").FirstOrDefault(); } //Create n... 阅读全文
摘要:
1.从DB中获取存在是student 2.在context作用域之外设置studentname 3.使用Context.Entry()方法获取实体的DBEntityEntry,并更改实体状态为modified 阅读全文
摘要:
首先创建新的Student对象并设置StudentName为bill 其次创建新的Context上下文,并把新实体添加到Students的EntitySet中 最后调用SaveChanges方法,将在数据库中执行如下操作 上面也可以用如下方法添加实体 阅读全文
摘要:
如何把断开的实体添加到新的context上下文中 1.首先,我们需要把实体附加到新的context上下文实例中。 2.其次,手动的给实体设置适当的实体状态,因为新的context上下文不知道断开的实体上有什么操作。 DbSet.Add(): 把实体添加到context上下文,并自动设置实体的属性为a 阅读全文
摘要:
实体框架的持久化 当用EntityFramework持久化一个对象时,有两种情形:连接的和断开的 1.连接场景:使用同一个context上下文从数据库中查询和持久化实体时,查询和持久化实体期间,context不会被销毁 2.断开场景:实体的查询和保存提交使用不同的context上下文 上图所示,co 阅读全文
摘要:
EntityFramework自动跟踪上下文中已经加载的实体,DbChangeTracker类给你关于当前实体的所有跟踪信息 注意,每个实体都要有EntityKey(主键)的属性,EntityFramework将不添加没有主键的概念模型 阅读全文
摘要:
DbEntityEntry是一个重要的类,用来获取各种各样的实体信息 可以通过DBContext的Entry方法获取DbEntityEntry的实例 通过DBEntityEntry,可以获取实体的状态,所有属性的当前值和原始值 DbEntityEntry可以设置实体的状态如Added、Modifie 阅读全文
摘要:
DBSet类表示一个实体的集合,用来创建、更新、删除、查询操作,DBSet<TEntity>是DBSet的泛型版本 你可以使用DbContext获取DBSet的引用,例如dbContext.Students DBSet中的一些重要方法 阅读全文
摘要:
First/FirstOrDefault: 对应的sql语句如下 如果没有数据First()将抛出异常,而FirstOrDefault()则返回数据类型的默认值,如引用类型则返回null Single/SingleOrDefault: sql语句如下 如果返回的结果包含一个以上的元素时,两者都会抛出 阅读全文
摘要:
1.多个select和where操作 2.Group by left outer join Sorting inner join 阅读全文
摘要:
上面的查询使用了多次的ToLower方法 下面的例子中使用let关键字重新引进一个变量,可以在查询中的任何地方使用,让代码可读性更高 into关键字,可以使你在一个select语句之后继续一个查询 上面的查询中,into关键字引进新的变量,所以从第一个变量s作用域出来,你可以用新的变量写出另一个查询 阅读全文
摘要:
延迟执行是指一个表达式的值延迟获取,知道它的值真正用到。 当你用foreach循环时,表达式才真正的执行。 延迟执行有个最重要的好处:它总是给你最新的数据 实现延迟运行 你可以使用yield关键字实现延迟加载 从上面输出的结果看出:当你用foreach循环遍历时,GetTeenAgerStudent 阅读全文
摘要:
表达式树就像是树形的数据结构,表达式树中的每一个节点都是表达式, 表达式树可以表示一个数学公式如:x<y。x、<、y都是一个表达式,并构成树形的数据结构 表达式树使lambda表达式的结构变得透明清楚, 编译器将上面的表达式翻译成下面的表达式树 你可以手动创建一个表达式树,如下 1.先创建参数节点 阅读全文