EFCore对数据库增删改查

本文介绍了如何使用C#的Entity Framework Core (EFCore) 进行数据库操作,包括插入数据、查询数据、更新数据、删除数据以及批量数据修改。强调了异步方法SaveChangesAsync()的重要性,并展示了Linq查询在数据库操作中的应用。
摘要由CSDN通过智能技术生成

插入数据
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


 

好的,下面是一个简单的使用 .Net Core 和 Entity Framework (EF) 的增删改查案例: 首,创建一个 ASP.NET Core Web 应用程序。在 Visual Studio 中,选择“创建新项目”,然后选择“ASP.NET Core Web 应用程序”。 接下来,选择一个模板,例如“Web 应用程序 (Model-View-Controller)”模板,然后点击“创建”。 在应用程序中,我们需要安装 Entity Framework Core。在“解决方案资源管理器”中右键单击项目,然后选择“管理 NuGet 包”选项。在“NuGet 包管理器”中搜索“Microsoft.EntityFrameworkCore”,然后安装它。 创建一个名为“AppDbContext.cs”的新类,用于定义数据库上下文。在该类中,我们需要指定要使用的数据库提供程序,以及要使用的数据库连接字符串。 ```csharp using Microsoft.EntityFrameworkCore; namespace YourAppName.Models { public class AppDbContext : DbContext { public AppDbContext(DbContextOptions<AppDbContext> options) : base(options) { } public DbSet<User> Users { get; set; } } } ``` 接下来,创建一个名为“User.cs”的新类,用于定义用户模型。 ```csharp namespace YourAppName.Models { public class User { public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } } } ``` 现在,我们可以创建控制器和视图来执行 CRUD 操作。 在“控制器”文件夹中,创建一个名为“UserController.cs”的新控制器。在控制器中,我们需要注入“AppDbContext”依赖项,并定义以下动作: - Index:显示所有用户。 - Details:显示单个用户的详细信息。 - Create:显示创建用户的表单。 - Edit:显示编辑用户的表单。 - Delete:显示删除用户的确认页面。 - CreatePost:处理创建用户的 POST 请求。 - EditPost:处理编辑用户的 POST 请求。 - DeletePost:处理删除用户的 POST 请求。 ```csharp using System.Linq; using Microsoft.AspNetCore.Mvc; using YourAppName.Models; namespace YourAppName.Controllers { public class UserController : Controller { private readonly AppDbContext _dbContext; public UserController(AppDbContext dbContext) { _dbContext = dbContext; } public IActionResult Index() { var users = _dbContext.Users.ToList(); return View(users); } public IActionResult Details(int id) { var user = _dbContext.Users.FirstOrDefault(u => u.Id == id); return View(user); } public IActionResult Create() { return View(); } [HttpPost] public IActionResult CreatePost(User user) { _dbContext.Users.Add(user); _dbContext.SaveChanges(); return RedirectToAction("Index"); } public IActionResult Edit(int id) { var user = _dbContext.Users.FirstOrDefault(u => u.Id == id); return View(user); } [HttpPost] public IActionResult EditPost(User user) { var existingUser = _dbContext.Users.FirstOrDefault(u => u.Id == user.Id); if (existingUser != null) { existingUser.Name = user.Name; existingUser.Age = user.Age; _dbContext.SaveChanges(); } return RedirectToAction("Index"); } public IActionResult Delete(int id) { var user = _dbContext.Users.FirstOrDefault(u => u.Id == id); return View(user); } [HttpPost] public IActionResult DeletePost(int id) { var user = _dbContext.Users.FirstOrDefault(u => u.Id == id); if (user != null) { _dbContext.Users.Remove(user); _dbContext.SaveChanges(); } return RedirectToAction("Index"); } } } ``` 在“视图”文件夹中,创建一个名为“Index.cshtml”的新视图,用于显示所有用户。在视图中,我们需要遍历所有用户,并为每个用户显示详细信息、编辑和删除链接。 ```html @model IEnumerable<User> <table> <thead> <tr> <th>ID</th> <th>Name</th> <th>Age</th> <th></th> </tr> </thead> <tbody> @foreach (var user in Model) { <tr> <td>@user.Id</td> <td>@user.Name</td> <td>@user.Age</td> <td> <a href="@Url.Action("Details", new { id = user.Id })">Details</a> | <a href="@Url.Action("Edit", new { id = user.Id })">Edit</a> | <a href="@Url.Action("Delete", new { id = user.Id })">Delete</a> </td> </tr> } </tbody> </table> <a href="@Url.Action("Create")">Create new user</a> ``` 创建一个名为“Details.cshtml”的新视图,用于显示单个用户的详细信息。 ```html @model User <div> <h1>@Model.Name</h1> <p>Age: @Model.Age</p> </div> <a href="@Url.Action("Index")">Back to list</a> ``` 创建一个名为“Create.cshtml”的新视图,用于显示创建用户的表单。 ```html @model User <form asp-action="CreatePost"> <div> <label>Name:</label> <input asp-for="Name" /> </div> <div> <label>Age:</label> <input asp-for="Age" /> </div> <button type="submit">Create</button> </form> <a href="@Url.Action("Index")">Back to list</a> ``` 创建一个名为“Edit.cshtml”的新视图,用于显示编辑用户的表单。 ```html @model User <form asp-action="EditPost"> <div> <label>ID:</label> <input asp-for="Id" readonly /> </div> <div> <label>Name:</label> <input asp-for="Name" /> </div> <div> <label>Age:</label> <input asp-for="Age" /> </div> <button type="submit">Save</button> </form> <a href="@Url.Action("Index")">Back to list</a> ``` 创建一个名为“Delete.cshtml”的新视图,用于显示删除用户的确认页面。 ```html @model User <div> <h1>Are you sure you want to delete this user?</h1> <p>@Model.Name (age @Model.Age)</p> </div> <form asp-action="DeletePost" method="post"> <input type="hidden" name="id" value="@Model.Id" /> <button type="submit">Delete</button> </form> <a href="@Url.Action("Index")">Cancel</a> ``` 现在,我们已经完成了一个简单的使用 .Net Core 和 Entity Framework 的增删改查案例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值