欢迎光临
个人技术文档整理

EF Core 简单的CURD操作

Create 增加
using (DataContext db = new DataAccess.DataContext())
            {
                var entity = new Demo() { Name = "demo" };

                //方法一
                db.Demos.Add(entity);

                //方法二
                //var entry = db.Entry(entity);
                //entry.State = EntityState.Added;

                db.SaveChanges();
            }

 

Update 修改
using (DataContext db = new DataAccess.DataContext())
            {
                var entity = db.Demos.FirstOrDefault(u => u.Name == "demo");
                entity.Name = "demo-改" + DateTime.Now.ToString();
                //方式一
                //db.Demos.Update(entity);

                //方式二
                //db.Entry(entity).State = EntityState.Modified;
                db.SaveChanges();
            }

 

Delete 删除

 using (DataContext db = new DataAccess.DataContext())
            {
                var entity = db.Demos.FirstOrDefault(u => u.Name == "demo");

                //方式一
                db.Demos.Remove(entity);

                //方式二
                db.Entry(entity).State = EntityState.Deleted;

                //方式三
                db.Demos.Remove(db.Demos.Find(1L ));//Find--主键的值

                db.SaveChanges();
            }

 

Select 查询

//单条查询
var query_1 = db.Demos.Where(u => u.Name == "demo").OrderBy(u => u.Name).FirstOrDefault();//升序 asc 
var query_2 = db.Demos.Where(u => u.Name == "demo").OrderByDescending(u => u.Name).FirstOrDefault();//降序 desc



//查询 表 总数量
var query_Count = db.Demos.Count();//SELECT COUNT(*)  FROM [Demo] 

//分页查询
int pageIndex = 1, pageSize = 10;
var query_page = db.Demos.Where(u => u.Name == "demo").OrderByDescending(u => u.Name).Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList();


 //查询列表
var query_list_1 = db.Demos.Where(u => u.Name == "demo").OrderBy(u => u.Name).ToList();//SELECT * FROM Demo WHERE Name='demo' ORDER BY Name
var query_list_2 = db.Demos.Where(u => u.Name == "demo").OrderBy(u => u.Name).Take(30).ToList();//查询前30条,exec sp_executesql N' SELECT TOP (@topNum) * FROM  Demo WHERE Name=''demo'' ORDER BY Name',N'@topNum int',@topNum=30


//查询指定列  Select 
var query_3 = db.Demos.Where(u => u.Name == "demo").Select(s => new { s.Id, s.Name }).FirstOrDefault();// SELECT TOP 1 Id,Name FROM dbo.Demo   WHERE name='demo'

 

IQueryable的延迟性

在构建查询表达式的时候,会有延迟性,就是虽然构建了表达式,但是不会立刻生成Sql发到数据库中,如下代码,运行的时候,可以看到并没有生成相关的sql查询指令。

只有调用以下方法的时候,才会执行正常的查询。
调用 LINQ 运算符时,只会构建查询在内存中的表示形式。 使用结果时,查询只会发送到数据库。

导致查询发送到数据库的最常见操作如下:

使用 for 遍历结果的时候
使用 ToList、ToArray、Single、First 等操作或者异步形式的操作的时候。
使用Count、Sum、Average等聚合或者异步形式聚合操作方式的时候。 

跟踪与非跟踪查询  (AsNoTracking)

EFCore默认是跟踪查询,从上可以知道,采用跟踪查询的效率没有采用非跟踪查询的效率高。

全局的跟踪和非跟踪

//开启追踪,默认是TrackAll,可以显示声明
optionsBuilder.UseQueryTrackingBehavior(QueryTrackingBehavior.TrackAll);
//请勿尝试,会禁止追踪所有实体
//optionsBuilder.UseQueryTrackingBehavior(QueryTrackingBehavior.NoTracking);
 

 

赞(1)