健壮性:
[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?再进行数据的获取
作业:实现接口的增删改查数据库