北京网站高端建设,随州seo搜索引擎优化排名,wordpress edu v2.0,购物网站的文化建设问题一、DbSet概述
1.DbSet提供了通过DbContext对表进行查询操作的路径。DbSet对应的属性名称将默认映射为实体T的表名。 2.使用DbSetT进行查询的方法#xff1a; (1)直接在DbContext中创建对应的DbSetT属性 (2)使用DbSet DbContext.SetT方法操作数据表。…一、DbSet概述
1.DbSet提供了通过DbContext对表进行查询操作的路径。DbSet对应的属性名称将默认映射为实体T的表名。 2.使用DbSetT进行查询的方法 (1)直接在DbContext中创建对应的DbSetT属性 (2)使用DbSet DbContext.SetT方法操作数据表。 3.在DbSetT中对于数据对象进行的任何操作都将保存在内存中只有当SaveChanges()方法被调用时才会将数据变化提交给数据库。
二、使用DbSet对数据库进行查询
1.在DbContext中没有对应DbSet字段的情况下使用SetT方法对表进行操作
运行
三、使用DbSet进行数据更新
1.在EF Core7.0版本以前要对数据进行更新我们需要首先把数据查询出来然后再进行修改。在EF Core7.0以后可以调用DbSetT对象的ExecuteUpdate()方法基于查询结果对数据进行修改。
运行
我们发现该方法似乎并不起作用。原因是什么见2 2.ExecuteUpdate()的注意事项 (1)不同于EF Core一般的数据修改方法先找数据重新赋值、删除再调用SaveChanges()调用ExecuteUpdate()方法将会把修改直接提交到数据库而不会去修改实体的状态DbContext也无法监测到实体状态的改变。也就是说上面的代码等价于
不过按理来说即使直接提交到数据库再次执行db.SetT.ToList()也会重新从数据库中查询。 但是EF Core中具有缓存机制它缓存了我们第一次查询的结果而没有真的再次去查询数据库。 要想解决这个问题有两种解决方案 第一可以重新创建一个数据库上下文
运行
第二为了避免查询结果被缓存直接让EF Core无法跟踪这个查询就好了使用AsNoTracking()方法将当前的查询设置为不能追踪
运行
注意即使authors1所属查询可以被跟踪即不调用AsNoTracking()方法运行结果也是正确的经过测试两个查询只要有一个不可被跟踪即可保证运行结果正确。 3.一次性更新对象的多个属性SetProperty()方法支持链式调用可以使用多个SetProperty()方法一次性更新多个属性。
运行
四、使用DbSet删除数据
1.在EF Core 7.0以前要想删除数据必须先把数据查询出来然后才能删除在EF Core 7.0及后续版本中可以使用ExecuteDelete()方法删除数据。注意与ExecuteUpdate()类似也需要将查询设置为不能跟踪。
运行