diff --git "a/\346\261\244\345\270\214\351\224\220/20240603-Post\345\222\214Put\347\232\204\344\275\277\347\224\250.md" "b/\346\261\244\345\270\214\351\224\220/20240603-Post\345\222\214Put\347\232\204\344\275\277\347\224\250.md" new file mode 100644 index 0000000000000000000000000000000000000000..dde85af649260abc4c6ec22060ab79c2db2d76cc --- /dev/null +++ "b/\346\261\244\345\270\214\351\224\220/20240603-Post\345\222\214Put\347\232\204\344\275\277\347\224\250.md" @@ -0,0 +1,187 @@ + 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/\346\261\244\345\270\214\351\224\220/20240604-Delete\347\232\204\344\275\277\347\224\250.md" "b/\346\261\244\345\270\214\351\224\220/20240604-Delete\347\232\204\344\275\277\347\224\250.md" new file mode 100644 index 0000000000000000000000000000000000000000..7a730adf8a78cd3966487d86333b934dda584293 --- /dev/null +++ "b/\346\261\244\345\270\214\351\224\220/20240604-Delete\347\232\204\344\275\277\347\224\250.md" @@ -0,0 +1,103 @@ +- 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); +} +``` + +```js +public BookDto? Delete(Guid authorId, Guid bookId) + { + /* + 1. 确认要操作的作者是否存在 + 存在则继续 + 不存在则返回null + 2. 在内存数据库查找对应的图书id + 存在则删除对应图书 + 不存在则返回null + */ + 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; + } + +``` +\ No newline at end of file + +42 陈俊豪/20240606-EFCore的简介 .md 0 -> 100644 +## 什么是 Entity Framework Core(EF Core)? + +Entity Framework Core(EF Core)是一个轻量级、可扩展且跨平台的对象关系映射(Object-Relational Mapping,ORM)框架,用于在.NET应用程序中实现数据访问。 + +## 主要特点 + +- **跨平台性**:EF Core支持在Windows、Linux和macOS上运行,可在不同的操作系统上开发和部署应用程序。 + +- **轻量级**:与以前的Entity Framework版本相比,EF Core更为轻量级,同时保持核心功能,使其更易于学习和使用。 + +- **可扩展性**:EF Core允许通过插件方式扩展功能,例如使用第三方提供的数据库提供程序或插件,以满足特定需求。 + +## 支持的数据库 + +EF Core支持多种数据库,包括但不限于: +- SQL Server +- MySQL +- PostgreSQL +- SQLite +- Oracle + +## EF Core在.NET中的使用 + +在.NET应用程序中,可以使用EF Core进行数据访问操作,如创建数据库、添加、查询、更新和删除数据等。 + +```csharp +// 示例代码:定义数据模型 +public class Product +{ + public int Id { get; set; } + public string Name { get; set; } + public decimal Price { get; set; } +} + +// 示例代码:使用EF Core进行数据库操作 +using (var context = new MyDbContext()) +{ + var product = new Product { Name = "Example", Price = 9.99 }; + context.Products.Add(product); + context.SaveChanges(); +} +``` \ No newline at end of file diff --git "a/\346\261\244\345\270\214\351\224\220/20240606-EFCore\347\232\204\347\256\200\344\273\213 .md" "b/\346\261\244\345\270\214\351\224\220/20240606-EFCore\347\232\204\347\256\200\344\273\213 .md" new file mode 100644 index 0000000000000000000000000000000000000000..83989648140dde7bbacd3f18b6a894062bf80737 --- /dev/null +++ "b/\346\261\244\345\270\214\351\224\220/20240606-EFCore\347\232\204\347\256\200\344\273\213 .md" @@ -0,0 +1,20 @@ +## 什么是 Entity Framework Core(EF Core)? + +Entity Framework Core(EF Core)是一个轻量级、可扩展且跨平台的对象关系映射(Object-Relational Mapping,ORM)框架,用于在.NET应用程序中实现数据访问。 + +## 主要特点 + +- **跨平台性**:EF Core支持在Windows、Linux和macOS上运行,可在不同的操作系统上开发和部署应用程序。 + +- **轻量级**:与以前的Entity Framework版本相比,EF Core更为轻量级,同时保持核心功能,使其更易于学习和使用。 + +- **可扩展性**:EF Core允许通过插件方式扩展功能,例如使用第三方提供的数据库提供程序或插件,以满足特定需求。 + +## 支持的数据库 + +EF Core支持多种数据库,包括但不限于: +- SQL Server +- MySQL +- PostgreSQL +- SQLite +- Oracle \ No newline at end of file diff --git "a/\346\261\244\345\270\214\351\224\220/20240607-EfCore\347\232\204\344\275\277\347\224\250.md" "b/\346\261\244\345\270\214\351\224\220/20240607-EfCore\347\232\204\344\275\277\347\224\250.md" new file mode 100644 index 0000000000000000000000000000000000000000..4e997dd80572af5688947a32c254de05a9030220 --- /dev/null +++ "b/\346\261\244\345\270\214\351\224\220/20240607-EfCore\347\232\204\344\275\277\347\224\250.md" @@ -0,0 +1,49 @@ +# 在.NET中连接SQL Server数据库 + +## 使用Entity Framework Core连接SQL Server + +1. **安装三个包和一个工具** +- ``dotnet add package Microsoft.EntityFrameWorkCore`` —— 核心库,提供了用于数据访问和操作的API +- ``dotnet add package Microsoft.EntityFrameWorkCore.Sqlserver`` —— 允许与数据库进行交互 +- ``dotnet add package Microsoft.EntityFrameWorkCore.Design`` —— 设计时工具,用于支持数据库迁移和模型生成 +- ``dotnet tool install -g dotnet-ef`` —— 用于使用 Entity Framework Core 进行数据库迁移操作 + +2. **定义数据上下文** + 创建一个继承自`DbContext`的数据上下文类,并指定要连接的SQL Server数据库。 + ```csharp + public class MyDbContext : DbContext + { + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + { + optionsBuilder.UseSqlServer("Server=your_server;Database=your_database;uid=sa;pwd=123456;Trusted_Connection=True;"); + } + + public DbSet Products { get; set; } + } + ``` + +3. **创建实体类** + 定义表示数据库表的实体类,并将其添加到数据上下文中以便EF Core跟踪。 + ```csharp + public class Product + { + public int Id { get; set; } + public string Name { get; set; } + public decimal Price { get; set; } + } + ``` + +4. **使用EF Core进行数据操作** + 在应用程序中实例化数据上下文,然后使用EF Core进行数据库操作(增删改查)。 + ```csharp + using (var context = new MyDbContext()) + { + var product = new Product { Name = "Example", Price = 9.99 }; + context.Products.Add(product); + context.SaveChanges(); + } + ``` + +5. **数据库迁移** +- ``dotnet ef migrations add `` —— 对本次修改生成迁移说明文件 +- ``dotnet ef database update`` —— 对其数据库进行同步