diff --git "a/\346\226\271\345\207\244\344\270\271/20241209\357\274\210\350\277\236\346\216\245\346\225\260\346\215\256\345\272\223\357\274\211.md" "b/\346\226\271\345\207\244\344\270\271/20241209\357\274\210\350\277\236\346\216\245\346\225\260\346\215\256\345\272\223\357\274\211.md" new file mode 100644 index 0000000000000000000000000000000000000000..8ef876c303c19a384d373cc899e977794afa419b --- /dev/null +++ "b/\346\226\271\345\207\244\344\270\271/20241209\357\274\210\350\277\236\346\216\245\346\225\260\346\215\256\345\272\223\357\274\211.md" @@ -0,0 +1,123 @@ +## 数据库模型与实践 + +### 1. 基本概念 + +- 数据库中的每个表都可以映射到程序中的一个模型类。 +- 表中的一条记录在程序中表现为一个对象。 +- 多条记录则表现为一个对象集合。 + + +### 2. 常见数据库种类 + +- Microsoft SQL Server:商业数据库,微软产品。 +- PostgreSQL:开源社区驱动的数据库。 +- MySQL/MariaDB:开源数据库,企业维护。 +- Oracle:商业数据库,性能稳定。 +- Sybase:商业数据库。 +- IBM DB2:商业数据库。 +- 达梦数据库:国产数据库。 +- 人大金仓:国产数据库。 +- Redis:开源的非关系型数据库。 +- Memcached:轻量级开源非关系型数据库。 +- MongoDB:开源非关系型数据库。 + + +### 3. 常见ORM工具 + +- Dapper:高效轻量,但需要手动书写代码。 +- Entity Framework Core(EF Core):微软产品,易于使用,但性能稍慢。 + - 数据库优先(曾流行) + - 代码优先(主流方法) + - 定义模型 + - 生成迁移文件 + - 应用迁移到数据库 +- FreeSql:开源的ORM工具。 +- Hibernate:经典开源ORM框架。 + + +### 4. 数据库连接步骤 + +- 安装 Entity Framework Core。 +- 定义模型。 +- 创建数据库上下文类(例如:`public DbSet Books { get; set; }`)。 +- 配置数据库连接(例如:设置数据库地址、用户名和密码)。 +- 数据迁移: + - 创建迁移文件:`dotnet ef migrations add InitialCreate` + - 更新数据库:`dotnet ef database update` +- 执行数据库操作。 + + +### 5. 具体操作步骤 +#### 1. 安装必要的包 +```js +- 安装数据库驱动包: + dotnet add package Microsoft.EntityFrameworkCore.SqlServer + +- 安装成功后,会在项目文件(例如:.csproj 文件)中显示: + + + +``` + +#### 2. 定义模型类 +```cs +// 定义实体类 Blogs +namespace Blog.Models; + +public class Blogs { + public int Id { get; set; } + public string Name { get; set; } = null!; + public int Age { get; set; } +} +``` + +#### 3. 定义数据库上下文 +```cs +using Microsoft.EntityFrameworkCore; + +namespace Blog.Models; + +// 定义数据库上下文类 +public class BlogDbContext : DbContext { + public DbSet Blogs { get; set; } = null!; + + public BlogDbContext(DbContextOptions options) : base(options) {} +} +``` + +#### 4. 配置数据库连接 +```cs +// 在 Program.cs 中添加配置: +using Blog.Models; +using Microsoft.EntityFrameworkCore; + +var connectionString = $"Server=.\\SQLEXPRESS;Database=MdBlog;uid=sa;pwd=123456;TrustServerCertificate=true;"; + +builder.Services.AddDbContext(options => { + options.UseSqlServer(connectionString); +}); +``` + +#### 5. 数据库迁移 +```bash +# 安装 dotnet ef 工具 + dotnet tool install --global dotnet-ef + +# 创建迁移文件 + dotnet ef migrations add InitialCreate + +# 更新数据库 + dotnet ef database update +``` + +#### 6. 处理常见问题 +```js +- 报错:找不到 `dotnet ef` 命令 + 解决:安装工具 `dotnet tool install --global dotnet-ef`。 + +- 报错:缺少 `Microsoft.EntityFrameworkCore.Design` 包 + 解决:安装包 `dotnet add package Microsoft.EntityFrameworkCore.Design`。 + +- 迁移时提示资源被锁定 + 解决:关闭运行中的程序,或在任务管理器中结束相关进程。 +``` \ No newline at end of file diff --git "a/\346\226\271\345\207\244\344\270\271/20241211(\350\241\250\350\276\276\345\274\217).md" "b/\346\226\271\345\207\244\344\270\271/20241211(\350\241\250\350\276\276\345\274\217).md" new file mode 100644 index 0000000000000000000000000000000000000000..24661f6ead61dfda9f0865bd714570526d923232 --- /dev/null +++ "b/\346\226\271\345\207\244\344\270\271/20241211(\350\241\250\350\276\276\345\274\217).md" @@ -0,0 +1,85 @@ +# 一.笔记 +```JS +查找开头前缀: + StartsWith("") + +降序:OrderByDescend() + +升序:OrderBy() + +去重:Distinct() + +查找最后一个数: + LastOrDefault() + +查询元素是否存在: + Array.Exists(元素,n=>条件) + +查询元素的计数: + Count() + +查询元素的总和; + Sum(n=>n) + +查询元素的最大值: + Max(n=>n) + +查询元素的最小值: + Min(n=>n) + +查询元素的平均值: + Average(n=>n) + +查询并选择特定属性: + Select() + // 找出所有学生的姓名和年龄 + var stu = students.Select(n=>new{n.Name,n.Age}).ToList(); + +分组+数量: + Group()+Select()+Count() + // 按年龄分组学生,并计算每个年龄组的学生数量 + var stu = students.GroupBy(n=>n.Age).Select(n=>new{Age=n.Key,Count=n.Count()}); + +查询并反转: + Reverse() + +填充默认值: + Select(n=>n??0) + // 如果数组中存在null值,用默认值0替换 + int?[] nullableNumbers = { 1, null, 3, null, 5 }; + // ?? 是一个空合并运算符。它用于为可空值类型和引用类型提供一个默认值,当操作数的值为 null 时。 + var num =nullableNumbers.Select(n=>n??0); + +查询并转换类型: + Select(n=>int.Parse(n)) + // 将字符串数组转换为整数数组 + string[] stringNumbers = { "1", "2", "3", "4" }; + // 将string[]转换为int[]数组 + // 转换函数使用Lambda表达式 n=>int.Parse(n),它将每个字符串转换为整数。 使用.ToArray() + // Parse 是一个静态方法,用于将字符串类型的表示形式转换为等效的数值类型 + int[] intnumber = stringNumbers.Select(n=>int.Parse(n)).ToArray(); + +查询并使用 OfType<数据类型>() 过滤: + // 从对象数组中过滤出字符串类型的元素 + object[] objects = { "String", 123, "Another String", 456 }; + var result = objects.OfType().ToList(); + +Range生成数组: + // 生成一个包含1到10的整数数组 + int[] numbers = Enumerable.Range(1, 10).ToArray(); + +Repeat重复: + Enumerable.Repeat(数字, 重复的次数) + // 重复一个元素多次,创建一个新数组 + int[] numbers = Enumerable.Repeat(7, 5).ToArray(); //77777 + +Take限制数量: + // 从数组中取出前5个元素 + int[] numbers = { 1, 2, 3, 4, 5, 6,18,23,64,7,18,2,3 }; + var num = numbers.Take(5); + +Skip跳过元素: + // 跳过数组中的前3个元素,然后取出剩余的元素 + int[] numbers = { 1, 2, 3, 4, 5, 6,18,23,64,7,18,2,3 }; + var num = numbers.Skip(3); +``` \ No newline at end of file diff --git "a/\346\226\271\345\207\244\344\270\271/20241213(\351\233\206\346\210\220\346\237\245\350\257\242).md" "b/\346\226\271\345\207\244\344\270\271/20241213(\351\233\206\346\210\220\346\237\245\350\257\242).md" new file mode 100644 index 0000000000000000000000000000000000000000..a9cc05b7836899137bd989ed68f59e4701b15cef --- /dev/null +++ "b/\346\226\271\345\207\244\344\270\271/20241213(\351\233\206\346\210\220\346\237\245\350\257\242).md" @@ -0,0 +1,136 @@ +## Linq集成查询和Lambda表达式 +1. First() FirstOrDefault() 获取集合中(符合条件的)第一个 + + - First() 这个如果没有获取到,则报错 + - FirstOrDefault() 没有获取到,则返回Null +2. Single() SingleOrDefault() 获取集合中(符合条件)的其中一个 + + - Single() 这个如果没有获取到,则报错 + - SingleOrDefault() 没有获取到,则返回Null +3. Where() 获取集合中符合条件的元素,将它们筛选出来放入一个新的集合中返回 + + - Where 查找符合条件的内容 +4. Select() 返回指定内容 + + - Select() 返回指定内容 Select(x=>new {x.Id}) + +### 持久化及其应用 + 结绳记事 + 甲骨文 + 碑 + 木简 + 竹简 + 纸 + 账本 + 电子记事本、Excel + 数据库 + 常见数据库 + Sqlserver 微软 商业 有免费版(限制) + Mysql/MariaDb 免费 也有商业版 + PostgreSQL 完全开源免费 许可宽松 + Oracle 商业数据库 贵 + 达梦 国产数据库 + 人大金仓 国产数据库 + sqllite 桌面数据库 + Redis 非关系型数据库 内存数据库 一般用于缓存 NoSQL + MongoDB 最像关系型数据库非关系型数据 NoSQL + 常见ORM工具 (ORM工具其实就是在应用和数据库之间担任通讯员) + Dapper 写法麻烦,运行速度很快 + EntityFrameworkCore 写法简单,运行速度略慢 + +@startmindmap + +* 控制器返回类型 + * 一般数据类型 直接返回如int、double、string、IEnumerable等数据类型 + * IActionResult类型 一个接口,用于返回HTTP状态信息,如200、301、401、404、500等 + * 视图 + * 重定向 + * ActionResult类型 将一般数据类型和HTTP状态信息混合使用 + * 特定于格式的操作结果:如JsonResult和ContentResult + * POCO(普通旧CLR对象) +@endmindmap + +```JS +查找开头前缀: + StartsWith("") + +降序:OrderByDescend() + +升序:OrderBy() + +去重:Distinct() + +查找最后一个数: + LastOrDefault() + +查询元素是否存在: + Array.Exists(元素,n=>条件) + +查询元素的计数: + Count() + +查询元素的总和; + Sum(n=>n) + +查询元素的最大值: + Max(n=>n) + +查询元素的最小值: + Min(n=>n) + +查询元素的平均值: + Average(n=>n) + +查询并选择特定属性: + Select() + // 找出所有学生的姓名和年龄 + var stu = students.Select(n=>new{n.Name,n.Age}).ToList(); + +分组+数量: + Group()+Select()+Count() + // 按年龄分组学生,并计算每个年龄组的学生数量 + var stu = students.GroupBy(n=>n.Age).Select(n=>new{Age=n.Key,Count=n.Count()}); + +查询并反转: + Reverse() + +填充默认值: + Select(n=>n??0) + // 如果数组中存在null值,用默认值0替换 + int?[] nullableNumbers = { 1, null, 3, null, 5 }; + // ?? 是一个空合并运算符。它用于为可空值类型和引用类型提供一个默认值,当操作数的值为 null 时。 + var num =nullableNumbers.Select(n=>n??0); + +查询并转换类型: + Select(n=>int.Parse(n)) + // 将字符串数组转换为整数数组 + string[] stringNumbers = { "1", "2", "3", "4" }; + // 将string[]转换为int[]数组 + // 转换函数使用Lambda表达式 n=>int.Parse(n),它将每个字符串转换为整数。 使用.ToArray() + // Parse 是一个静态方法,用于将字符串类型的表示形式转换为等效的数值类型 + int[] intnumber = stringNumbers.Select(n=>int.Parse(n)).ToArray(); + +查询并使用 OfType<数据类型>() 过滤: + // 从对象数组中过滤出字符串类型的元素 + object[] objects = { "String", 123, "Another String", 456 }; + var result = objects.OfType().ToList(); + +Range生成数组: + // 生成一个包含1到10的整数数组 + int[] numbers = Enumerable.Range(1, 10).ToArray(); + +Repeat重复: + Enumerable.Repeat(数字, 重复的次数) + // 重复一个元素多次,创建一个新数组 + int[] numbers = Enumerable.Repeat(7, 5).ToArray(); //77777 + +Take限制数量: + // 从数组中取出前5个元素 + int[] numbers = { 1, 2, 3, 4, 5, 6,18,23,64,7,18,2,3 }; + var num = numbers.Take(5); + +Skip跳过元素: + // 跳过数组中的前3个元素,然后取出剩余的元素 + int[] numbers = { 1, 2, 3, 4, 5, 6,18,23,64,7,18,2,3 }; + var num = numbers.Skip(3); +``` \ No newline at end of file