From f71f3ae5cda7fc8a9a3ec2cfa93412a7438bc39e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=92=B2=E6=98=8C=E6=9C=88?= <2821684800@qq.com> Date: Mon, 10 Jun 2024 13:22:02 +0000 Subject: [PATCH] =?UTF-8?q?=E7=AC=94=E8=AE=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 蒲昌月 <2821684800@qq.com> --- ...40\357\274\214\347\274\226\350\276\221.md" | 188 ++++++++++++++++++ ...71\347\233\256\345\210\240\351\231\244.md" | 57 ++++++ ...44\270\244\350\241\250\347\232\204CRUD.md" | 171 ++++++++++++++++ ...re\346\225\260\346\215\256\345\272\223.md" | 65 ++++++ 4 files changed, 481 insertions(+) create mode 100644 "\350\222\262\346\230\214\346\234\210/20240603-Web\351\241\271\347\233\256\345\242\236\345\212\240\357\274\214\347\274\226\350\276\221.md" create mode 100644 "\350\222\262\346\230\214\346\234\210/20240604-Web\351\241\271\347\233\256\345\210\240\351\231\244.md" create mode 100644 "\350\222\262\346\230\214\346\234\210/20240606-\345\256\236\347\216\260\344\270\244\350\241\250\347\232\204CRUD.md" create mode 100644 "\350\222\262\346\230\214\346\234\210/20240607-EF Core\346\225\260\346\215\256\345\272\223.md" diff --git "a/\350\222\262\346\230\214\346\234\210/20240603-Web\351\241\271\347\233\256\345\242\236\345\212\240\357\274\214\347\274\226\350\276\221.md" "b/\350\222\262\346\230\214\346\234\210/20240603-Web\351\241\271\347\233\256\345\242\236\345\212\240\357\274\214\347\274\226\350\276\221.md" new file mode 100644 index 0000000..0274c4c --- /dev/null +++ "b/\350\222\262\346\230\214\346\234\210/20240603-Web\351\241\271\347\233\256\345\242\236\345\212\240\357\274\214\347\274\226\350\276\221.md" @@ -0,0 +1,188 @@ +## Web项目讲解(增加、编辑) +- AuthorController +```csharp + //获取所有 + [HttpGet("{id?}")] + public IActionResult Get(Guid id) + { + //用我们注入的接口,使用其中我们定义的函数方法去实现功能 + var list = _authorRepository.GetAllAuthors(id); + return Ok(list); + } + //保存 + [HttpPost] + public ActionResult Post(AuthorCreateDto AuthorCreateDto) + { + //用我们注入的接口,使用其中我们定义的函数方法去实现功能 + var list = _authorRepository.Create(AuthorCreateDto); + return Ok(list); + } + //修改 + [HttpPut("{id}")] + public ActionResult Put(Guid id, AuthorEditDto authorEditDto) + { + //用我们注入的接口,使用其中我们定义的函数方法去实现功能 + var list = _authorRepository.Edit(id, authorEditDto); + return Ok(list); + } +``` +- AuthorStoreDb +```csharp +//初始化一个AuthorStoreDb对象 + public static AuthorStoreDb Index { get; set; } = new AuthorStoreDb(); + //初始化一个ICollection集合类型的对象,将它new成一个list的对象(Authors是你创建的Domain中的实例化对象) + public ICollection Authors { get; set; } = new List(); + public ICollection Books { get; set; } = new List(); + //给内存型的数据库添加数据,List集合使用Add添加 + public AuthorStoreDb() + { + Authors.Add(new Authors + { + Id = Guid.NewGuid(), + AuthorName = "aaaa", + Gender = 1 + }); + Authors.Add(new Authors + { + Id = Guid.NewGuid(), + AuthorName = "bbbb", + Gender = 0 + }); + Authors.Add(new Authors + { + Id = Guid.NewGuid(), + AuthorName = "cccc", + Gender = 1 + }); + Books.Add(new Books + { + Id = Guid.NewGuid(), + BookName = "aaa", + AuthorId = Guid.NewGuid() + }); + Books.Add(new Books + { + Id = Guid.NewGuid(), + BookName = "bbb", + AuthorId = Guid.NewGuid() + }); + Books.Add(new Books + { + Id = Guid.NewGuid(), + BookName = "cccc", + AuthorId = Guid.NewGuid() + }); + + } +``` +- Startup +```csharp +public void ConfigureServices(IServiceCollection service) + { + //注册控制器 + service.AddControllers(); + // 将仓储服务注册到容器 + service.AddScoped(); + } +``` +- IAuthorRepository +```csharp +using Admin8.Domain; +using Admin8.Dto; + +namespace Admin8.Interface; + +public interface IAuthorRepository +{ + //定义接口中的函数,返回类型,形参 + //定义获取的方法 + ICollection? GetAllAuthors(Guid id); + //定义增加的方法 + AuthorDto Create(AuthorCreateDto authorCreateDto); + //定义编辑的方法 + AuthorDto? Edit(Guid id, AuthorEditDto authorEditDto); + //定义删除的方法 + AuthorDto? Delete(Guid id); +} +``` +- AuthorRepository +```csharp +//获取全部或者指定Guid的作者(AuthorDto中我的是将Password隐藏了的,如果不用的话,考试时可以直接改为Author) + public ICollection? GetAllAuthors(Guid guid) + { + //判断传进来的Id是否存在,不存在的Guid默认值为00000000-0000-0000-0000-000000000000 + if (guid.ToString() == "00000000-0000-0000-0000-000000000000") + { + //在内存型数据库中获取到所有的数据 + var list = AuthorStoreDb.Index.Authors.ToList(); + //创建一个List集合保存需要返回的数据(我这里返回的数据中将Password隐藏了,如果不需要隐藏,以下省略) + var result = new List(); + list.ForEach(item => + { + var temp = new AuthorDto { Id = item.Id, AuthorName = item.AuthorName, Gender = item.Gender }; + result.Add(temp); + }); + //将数据返回(我这里返回的数据中将Password隐藏了,如果不需要隐藏,以下返回改为list) + return result; + } + else + { + //在内存型数据库中获取到指定Guid的数据 + var list = AuthorStoreDb.Index.Authors.FirstOrDefault(item => item.Id == guid); + //没有则返回空,并结束函数 + if (list == null) + { + return null; + } + //创建一个List集合保存需要返回的数据(我这里返回的数据中将Password隐藏了,如果不需要隐藏,以下省略) + var result = new List(); + var obj = new AuthorDto { Id = list.Id, AuthorName = list.AuthorName, Gender = list.Gender }; + result.Add(obj); + //将数据返回(我这里返回的数据中将Password隐藏了,如果不需要隐藏,以下返回改为list) + return result; + } + + } + //添加作者信息 + public AuthorDto Create(AuthorCreateDto authorCreateDto) + { + //创建一个新的Authors,其中将上面传进来的authorCreateDto数据保存进去 + var obj = new Authors + { + //Guid.NewGuid()这是让他自己创建一个新的Guid + Id = Guid.NewGuid(), + AuthorName = authorCreateDto.AuthorName, + Gender = authorCreateDto.Gender, + Password = authorCreateDto.Password + }; + //将创建的数据保存进内存型数据库(List用Add添加),AuthorStoreDb中看一下结构,逐级.下去的 + AuthorStoreDb.Index.Authors.Add(obj); + var list = new AuthorDto { Id = obj.Id, AuthorName = obj.AuthorName, Gender = obj.Gender }; + //将数据返回(我这里返回的数据中将Password隐藏了,如果不需要隐藏,以下返回改为obj) + return list; + } + //修改 + public AuthorDto? Edit(Guid guid, AuthorEditDto authorEditDto) + { + //先在内存型数据库中找到是否有这个guid + var list = AuthorStoreDb.Index.Authors.FirstOrDefault(item => item.Id == guid); + if (list == null) + { + return null; + } + //不为空就不会执行上面的return,继续下面的内容 + //给找到的去数据赋值,authorEditDto是传进来修改的内容 + list.AuthorName = authorEditDto.AuthorName; + list.Gender = authorEditDto.Gender; + list.Password = authorEditDto.Password; + //创建一个AuthrDto保存需要返回的数据(我这里返回的数据中将Password隐藏了,如果不需要隐藏,以下省略) + var result = new AuthorDto + { + Id = guid, + AuthorName = list.AuthorName, + Gender = list.Gender + }; + //将数据返回(我这里返回的数据中将Password隐藏了,如果不需要隐藏,以下返回改为list) + return result; + } +``` \ No newline at end of file diff --git "a/\350\222\262\346\230\214\346\234\210/20240604-Web\351\241\271\347\233\256\345\210\240\351\231\244.md" "b/\350\222\262\346\230\214\346\234\210/20240604-Web\351\241\271\347\233\256\345\210\240\351\231\244.md" new file mode 100644 index 0000000..ce469f1 --- /dev/null +++ "b/\350\222\262\346\230\214\346\234\210/20240604-Web\351\241\271\347\233\256\345\210\240\351\231\244.md" @@ -0,0 +1,57 @@ +## Web项目讲解(删除) +- AuthorController +```csharp + //删除 + [HttpDelete("{id}")] + public IActionResult Del(Guid id) + { + //用我们注入的接口,使用其中我们定义的函数方法去实现功能 + var list = _authorRepository.Delete(id); + return Ok(list); + } +``` +- IAuthorRepository +```csharp +using Admin8.Domain; +using Admin8.Dto; + +namespace Admin8.Interface; + +public interface IAuthorRepository +{ + //定义接口中的函数,返回类型,形参 + //定义获取的方法 + ICollection? GetAllAuthors(Guid id); + //定义增加的方法 + AuthorDto Create(AuthorCreateDto authorCreateDto); + //定义编辑的方法 + AuthorDto? Edit(Guid id, AuthorEditDto authorEditDto); + //定义删除的方法 + AuthorDto? Delete(Guid id); +} +``` +- AuthorRepository +```csharp + //删除 + public AuthorDto? Delete(Guid id) + { + //先在内存型数据库中找到是否有这个guid + var obj = AuthorStoreDb.Index.Authors.FirstOrDefault(item => item.Id == id); + if (obj == null) + { + return null; + } + //不为空就不会执行上面的return,继续下面的内容 + //先在内存型数据库中使用Remove去删除这个obj内容(不是还用item什么的,直接把这个找到的对象放进去) + AuthorStoreDb.Index.Authors.Remove(obj); + //创建一个AuthrDto保存需要返回的数据(我这里返回的数据中将Password隐藏了,如果不需要隐藏,以下省略) + var result = new AuthorDto + { + Id = obj.Id, + AuthorName = obj.AuthorName, + Gender = obj.Gender + }; + //将数据返回(我这里返回的数据中将Password隐藏了,如果不需要隐藏,以下返回改为要删除的对象obj) + return result; + } +``` \ No newline at end of file diff --git "a/\350\222\262\346\230\214\346\234\210/20240606-\345\256\236\347\216\260\344\270\244\350\241\250\347\232\204CRUD.md" "b/\350\222\262\346\230\214\346\234\210/20240606-\345\256\236\347\216\260\344\270\244\350\241\250\347\232\204CRUD.md" new file mode 100644 index 0000000..5689f8f --- /dev/null +++ "b/\350\222\262\346\230\214\346\234\210/20240606-\345\256\236\347\216\260\344\270\244\350\241\250\347\232\204CRUD.md" @@ -0,0 +1,171 @@ +## 实现俩表CRUD +- BookController +```csharp +using BookStore.Api.Dto; +using BookStore.Api.Interface; +using Microsoft.AspNetCore.Mvc; + +namespace BookStore.Api.Controller; + +[ApiController] +[Route("api/authors/{authorId}/[controller]/")] +public class BooksController : ControllerBase +{ + + private readonly IBookRepository _bookRepository; + + public BooksController(IBookRepository bookRepository) + { + _bookRepository = bookRepository; + } + + [HttpGet("{bookId?}")] + public IActionResult Get(Guid authorId, Guid bookId) + { + if (bookId.ToString() == "00000000-0000-0000-0000-000000000000") + { + var list = _bookRepository.GetAllBooks(authorId); + return Ok(list); + } + + var result = _bookRepository.GetBookById(authorId, bookId); + + return Ok(result); + } + + [HttpPost] + public IActionResult Post(Guid authorId, BookCreateDto bookCreateDto) + { + var result = _bookRepository.Insert(authorId, bookCreateDto); + return Ok(result); + } + + [HttpPut("{bookId}")] + public IActionResult Put(Guid authorId, Guid bookId, BookUpdateDto bookUpdateDto) + { + var result = _bookRepository.Update(authorId, bookId, bookUpdateDto); + return Ok(result); + } + + [HttpDelete("{bookId}")] + public IActionResult Delete(Guid authorId, Guid bookId) + { + var result = _bookRepository.Delete(authorId, bookId); + return Ok(result); + } +} +``` +- BookRepository +```csharp +using BookStore.Api.Db; +using BookStore.Api.Domain; +using BookStore.Api.Dto; +using BookStore.Api.Interface; + +namespace BookStore.Api.Services; + +public class BookRepository : IBookRepository +{ + public BookDto? Delete(Guid authorId, Guid bookId) + { + var author = BookStoreDb.Instance.Authors.FirstOrDefault(item => item.Id == authorId); + if (author == null) + { + return null; + } + var book = BookStoreDb.Instance.Books.FirstOrDefault(item => item.Id == bookId); + if (book == null) + { + return null; + } + BookStoreDb.Instance.Books.Remove(book); + var result = new BookDto { Id = bookId, AuthorId = authorId, BookName = book.BookName }; + return result; + } + + public ICollection GetAllBooks(Guid authorId) + { + var list = BookStoreDb.Instance.Books.Where(item => item.AuthorId == authorId) + .Select(item => new BookDto { Id = item.Id, AuthorId = item.AuthorId, BookName = item.BookName }).ToList(); + return list; + } + + public BookDto? GetBookById(Guid authorId, Guid bookId) + { + var author = BookStoreDb.Instance.Authors.FirstOrDefault(item => item.Id == authorId); + if (author == null) + { + return null; + } + var book = BookStoreDb.Instance.Books.FirstOrDefault(item => item.AuthorId == authorId && item.Id == bookId); + + if (book == null) + { + return null; + } + return new BookDto { Id = book.Id, BookName = book.BookName, AuthorId = book.AuthorId }; + } + + public BookDto? Insert(Guid authorId, BookCreateDto bookCreateDto) + { + var author = BookStoreDb.Instance.Authors.FirstOrDefault(item => item.Id == authorId); + if (author == null) + { + return null; + } + var tmp = new Books + { + Id = Guid.NewGuid(), + BookName = bookCreateDto.BookName, + Publisher = bookCreateDto.Publisher, + Price = bookCreateDto.Price, + AuthorId = authorId + }; + + BookStoreDb.Instance.Books.Add(tmp); + + var result = new BookDto { Id = tmp.Id, BookName = tmp.BookName, AuthorId = tmp.AuthorId, Author = author }; + + return result; + } + + public BookDto? Update(Guid authorId, Guid BookId, BookUpdateDto bookUpdateDto) + { + var author = BookStoreDb.Instance.Authors.FirstOrDefault(item => item.Id == authorId); + if (author == null) + { + return null; + } + + var book = BookStoreDb.Instance.Books.FirstOrDefault(item => item.Id == BookId); + if (book == null) + { + return null; + } + + book.BookName = bookUpdateDto.BookName; + book.Publisher = bookUpdateDto.Publisher; + book.Price = bookUpdateDto.Price; + book.BookName = bookUpdateDto.BookName; + + var result = new BookDto { Id = book.Id, BookName = book.BookName, AuthorId = book.AuthorId }; + return result; + } +} +``` +- Startup +```csharp +public void ConfigureServices(IServiceCollection services) + { + // 将swagger端点服务和界面服务注册到容器 + services.AddEndpointsApiExplorer(); + services.AddSwaggerGen(); + + // 将控制器服务注册到容器 + services.AddControllers(); + + // 将仓储服务注册到容器 + services.AddScoped(); + services.AddScoped(); + } +``` \ No newline at end of file diff --git "a/\350\222\262\346\230\214\346\234\210/20240607-EF Core\346\225\260\346\215\256\345\272\223.md" "b/\350\222\262\346\230\214\346\234\210/20240607-EF Core\346\225\260\346\215\256\345\272\223.md" new file mode 100644 index 0000000..6d68eac --- /dev/null +++ "b/\350\222\262\346\230\214\346\234\210/20240607-EF Core\346\225\260\346\215\256\345\272\223.md" @@ -0,0 +1,65 @@ +## EF Core数据库 + +### 创建一个通用的CRUD接口 +```csharp +public interface IRepositoryBase +{ + T GetById(Guid id); + List GetAll(); + T Insert(T entity); + T Update(T entity); + T Delete(T entity); + T Delete(Guid id); +} +``` + +### EF Core数据库 +1. 安装的依赖包 +- dotnet add package Mircosoft.EntityFrameworkCore +- dotnet add package Mircosoft.EntityFrameworkCore.SqlServer +- dotnet add package Mircosoft.EntityFrameworkCore.Design +2. 创建一个`名StoreDbContext.cs` +```csharp +using BookStore.Api.Domain; +using Microsoft.EntityFrameworkCore; + +namespace BookStore.Api.Db; + +public class BookStoreDbContext : DbContext +{ + public BookStoreDbContext(DbContextOptions options) : base(options) + { + + } + + + public DbSet Authors { get; set; } + public DbSet Books { get; set; } +} +``` +3. Startup +```csharp + public void ConfigureServices(IServiceCollection services) + { + // 将swagger端点服务和界面服务注册到容器 + services.AddEndpointsApiExplorer(); + services.AddSwaggerGen(); + + // 将控制器服务注册到容器 + services.AddControllers(); + + // 将仓储服务注册到容器 + services.AddScoped(); + services.AddScoped(); + + // 注册数据库上下文到容器 + services.AddDbContext( + option => + option.UseSqlServer(_configuration.GetConnectionString("Mssql")) + //"server=.;database=BookStore;uid=sa;pwd=123456;TrustServerCertificate=true"; + ); + } +``` +4. 更新同步迁移命令 +- 更新ef工具包版本:dotnet tool install -g dotnet-ef +- 生成迁移文件:dotnet ef migrations add FirstMo \ No newline at end of file -- Gitee