使用EFcore实现对数据库的增删改查

健壮性:

[HttpPut("{id}")]
public async Task<IActionResult> PutUser(int id, [FromBody] TUser user)
{
    // 检查请求体中的用户ID是否与路径参数匹配
    if (user.Id != id)
    {
        return BadRequest("User ID in the body does not match the ID in the URL.");
    }

    // 在数据库中找到对应的实体
    var existingUser = await db.TUsers.FindAsync(id);

    // 如果实体不存在,返回404 Not Found
    if (existingUser == null)
    {
        return NotFound();
    }

    // 更新实体的属性
    db.Entry(existingUser).CurrentValues.SetValues(user);

    // 保存更改到数据库
    await db.SaveChangesAsync();

    return Ok("修改成功");
}

改:将对应的数据取出来将输入的数据赋值进去,再更新一下

 //改
 [HttpPut("{id}")]
 public async Task<IActionResult> PutUser([FromRoute]int id,TUser user)
 {
     //
     var u = db.TUsers.Single(u=>u.Id== id);
     u.Username= user.Username;
     u.Password= user.Password;
     await db.SaveChangesAsync();
     return Ok(user);
 }

与上一篇文章结合食用: 

Program.cs

namespace ConsoleApp9
{
    internal class Program
    {
        static async Task Main(string[] args)
        {
            //cxt逻辑上的数据库
            using (MyDbContext cxt=new MyDbContext())
            {
              //  Dog d = new Dog();
              //  d.Name = "Lili";
              //  cxt.Dogs.Add(d);//追加到逻辑上的表里
              //  //cxt.SaveChanges();//相当于UPdate-Database
              //await  cxt.SaveChangesAsync();//推荐异步方法
              /*Book b1= new Book();
              b1.AuthorName = "曹雪芹";
              b1.Title = "《红楼梦》";
              b1.PubTime = new DateTime(1791, 5, 10);
              b1.Price = 121;
              Book b2= new Book();
              b2.AuthorName = "吴承恩";
              b2.Title = "《西游记》";
              b2.PubTime = new DateTime(1212, 2, 19);
              b2.Price = 144;
              Book b3 = new Book();
              b3.AuthorName = "罗贯中";
              b3.Title = "《三国演义》";
              b3.PubTime = new DateTime(1828, 1, 20);
              b3.Price = 120;
              cxt.Books.Add(b1);
              cxt.Books.Add(b2);
              cxt.Books.Add(b3);
              await cxt.SaveChangesAsync();*/

              /*var books = cxt.Books.Single(b => b.Price > 120);
              Console.WriteLine(books.Title);
              var groups = cxt.Books.GroupBy(b => b.AuthorName).Select(g =>
                  new { AuthorName = g.Key, BooksCount = g.Count(), MaxPrice = g.Max(b => b.Price) });
              foreach (var g in groups)
              {
                  Console.WriteLine($"作者:{g.AuthorName},著作量:{g.BooksCount},最贵的价格:{g.MaxPrice}");
              }*/
             /*var b = cxt.Books.Single(b => b.Title == "《三国演义》");
              b.AuthorName = "王熙凤";
              await cxt.SaveChangesAsync();*/
             /*var b = cxt.Books.Single(b => b.Title == "《三国演义》");
             cxt.Remove(b);
             await cxt.SaveChangesAsync();*/
             var books = cxt.Books.Where(b => b.Price > 10);
             foreach (var b in books)
             {
                 b.Price += 1;
             }
             await cxt.SaveChangesAsync();
            }
        }
    }
}

1.插入数据

Task:这是一个表示异步操作的类,它封装了异步操作的状态和结果。当异步操作完成时,Task对象会提供结果或异常。

Program.cs

namespace ConsoleApp9
{
    internal class Program
    {
        static async Task Main(string[] args)
        {
            //cxt逻辑上的数据库
            using (MyDbContext cxt=new MyDbContext())
            {
                Dog d = new Dog();
                d.Name = "Lili";
                cxt.Dogs.Add(d);//追加到逻辑上的表里
                //cxt.SaveChanges();//相当于UPdate-Database
              await  cxt.SaveChangesAsync();//推荐异步方法
            }
        }
    }
}

插入方法:Add-SaveChangesAsync就搞定了

1.1初始化数据

安装上面 的方法自己实现

Book b1= new Book();
b1.AuthorName = "曹雪芹";
b1.Title = "《红楼梦》";
b1.PubTime = new DateTime(1791, 5, 10);
b1.Price = 121;
Book b2= new Book();
b2.AuthorName = "吴承恩";
b2.Title = "《西游记》";
b2.PubTime = new DateTime(1212, 2, 19);
b2.Price = 144;
Book b3 = new Book();
b3.AuthorName = "罗贯中";
b3.Title = "《三国演义》";
b3.PubTime = new DateTime(1828, 1, 20);
b3.Price = 120;
cxt.Books.Add(b1);
cxt.Books.Add(b2);
cxt.Books.Add(b3);
await cxt.SaveChangesAsync();

重复执行代码会重复插入数据

2.查询数据

EFcore将Linq语句转换成sql语句

var books = cxt.Books.Where(b => b.Price > 120);
foreach (var b in books)
{
    Console.WriteLine(b.Title);
}

运行:

Single:获取单一数据,数据库里只有这一条数据的时候才能使用

var books = cxt.Books.Single(b => b.Price > 120);

OrderBy:根据xx排序

var books = cxt.Books.OrderBy(b => b.Price).Where(b=>b.Price>10);

2.1复杂的

var groups = cxt.Books.GroupBy(b => b.AuthorName).Select(g =>
    new { AuthorName = g.Key, BooksCount = g.Count(), MaxPrice = g.Max(b => b.Price) });
foreach (var g in groups)
{
    Console.WriteLine($"作者:{g.AuthorName},著作量:{g.BooksCount},最贵的价格:{g.MaxPrice}");
}

3.修改和删除

var b = cxt.Books.Single(b => b.Title == "《三国演义》");
b.AuthorName = "王熙凤";
await cxt.SaveChangesAsync();

var b = cxt.Books.Single(b => b.Title == "《三国演义》");
cxt.Remove(b);
await cxt.SaveChangesAsync();

4.批量删除与修改

对所有大于10的书的价格加1

var books = cxt.Books.Where(b => b.Price > 10);
foreach (var b in books)
{
    b.Price += 1;
}
await cxt.SaveChangesAsync();

.net6没有高效的批量的处理修改,删除

批量删除:delete语句

下面只生成一个Update

可能会有不一致性

使用建议:删除完后新建一个DbContext?再进行数据的获取

作业:实现接口的增删改查数据库

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值