插入数据
1、只要操作模型类属性,就可以向数据库中增加数据,但是通过C#代码修改模型类中的数据只是修改了内存中的数据。对模型类做修改后,需要调用DbContext的异步方法。
SaveChangesAsync()把修改保存到数据库。也有同步的保存方法SaveChanges(),但是用EF Core都推荐用异步方法。异步知识点还欠缺的朋友可能需要去补一补。
2、EF Core默认会跟踪实体类对象以及DbSet的改变。
public class Program
{
static async Task Main(string[] args)
{//实例化上下文类 mdb 逻辑上的数据库
using (MyDbContext mdb = new MyDbContext())
{//在实例化实体类Books 给实体类的属性添加值
Book book = new Book();
book.bookname = "钢铁是怎样练成的";
book.CreatName = DateTime.Now.ToString();
book.DateTime = DateTime.Now;
mdb.Books.Add(book);//把模型表book的对象加入到逻辑数据库中的Dbset<Books>逻辑表里面
await mdb.SaveChangesAsync(); //Savechanges()方法相当与Update-Database
}
}
}
查询数据
1、DbSet实现了IEnumerable<T>接口,因此可以对
DbSet实施Linq操作来进行数据查询。EF Core会把Linq操作编译转换为SQL语句。
这就实现了面向对象对数据库进行操作。
#region 查询数据
//where可以查询范围的值
//var books = mdb.Books.Where(b => b.Id > 0);
//foreach (var book in books)
//{
// Console.WriteLine(book.bookname);
//}
//single返回一个数据的对象 一条数据对象 可以准确的查询出精确的数据
//var book = mdb.Books.Single(b => b.Id ==2);
//Console.WriteLine(book.bookname);
//orderby 排序
//var books = mdb.Books.OrderBy(b=>b.Id);可以添加Where条件 列如:Where(b=>b.id<10)
//foreach (var item in books)
//{
// Console.WriteLine(item.bookname);
//}
#endregion
修改数据
1、要对数据进行修改,首先需要把要修改的数据查询出来,然后再对查询出来的对象进行修改,然后再执行SaveChanges()保存修改。
有点繁琐,需要先用Single把数据对象查询出来
然后执行修改属性值通过SvaeChanges();方法更新
#region 修改数据
var book = mdb.Books.Single(b=>b.bookname== "钢铁是怎样练成的");
book.bookname = "我不想炼钢铁了";
await mdb.SaveChangesAsync();//把修改的数据保存关系数据库
#endregion
删除数据
1、删除也是先把要修改的数据查询出来,然后再调用DbContext的Remove方法把对象删除,然后再执行
SaveChanges(保存修改)。
#region 删除数据
var book = mdb.Books.Single(b => b.Id==1);
mdb.Remove(book);
await mdb.SaveChangesAsync();//把删除的数据保存关系数据库
#endregion
批量数据修改
1、目前批量修改、删除多条数据的方法。
局限性:性能低:杳出来,再一条条Update、Delete,而不能执行
#region 批量数据修改
var books = mdb.Books.Where(b=>b.Id<10);
foreach (var book in books)
{
Console.WriteLine(book.bookname);
// book.bookname = book.bookname + '的';
}
// await mdb.SaveChangesAsync();
#endregion