Entity Framework Core使用笔记③
简单的查询和插入,修改
插入:
例:Contex.Book.Add(book);
Context的add方法是追踪book对象;
例:Contex.SaveChanges();
检查所有追踪的对象;
读取每个对象状态;
生成sql语句;
执行sql语句;
如果返回数据,获取这些数据返回值;
private readonly MyContext context; public WeatherForecastController( MyContext context) { this.context = context; } [HttpGet] public int Get() { var sort=new Sort { Types = "IT", BookId="1" }; //连接数据库已经注册了 context.Add(sort); return context.SaveChanges(); }
批量插入可以使用context.AddRange
查询:
private readonly MyContext context; public WeatherForecastController( MyContext context) { this.context = context; } [HttpGet] public List<Sort> Get() { return context.Sorts.ToList(); }
这个Tolist遇到的时候才做的查询,前面都是在拼表达式。
或者便利获取到,但是会影响性能,因为便利时会context没有关闭。
查询的过滤语句
查询的方法linq方法
ToList(); 返回集合
First(); 返回第一调数据,没有抛异常
FirstOrDefault(); 和上面一样,但没数据不抛异常
single();多余一条都会抛异常
SingleOrDefault();两和以上条会异常,
Last();需要排序
LastOrDefault();
Count();
LongCount();
Min();
Max();
Average();
LIKE查询:
//Name like "%11%"
linq:where(x=>x.Name.Contains("11"));
EFcore:where(x=>x.EF.Functions.like(x.Name,"%11%"));
修改数据:
private readonly MyContext context; public WeatherForecastController( MyContext context) { this.context = context; } [HttpGet] public int Get() { var sort = context.Sorts.FirstOrDefault(); if (sort != null) { sort.Types = "child"; } return context.SaveChanges(); }
修改了第一个行的Types
因为这个对象第一列做了查询一直被dbcontext一直被追踪。
上面的都是在线修改,加载到内存去修改,EFcore也支持离线修改,使用update方法。
删除:
删除需要追踪那条数据,使用它的remove()方法。
原始sql的支持
存储过程:
context.Database.ExecuteSqlCommand("exec...");
执行查询:
Dbset.Fromsql();