当前位置: 首页 > news >正文

C# Web开发教程(二)

ORM(Object-Relational-Mapping)

  • 常用框架
- EF core (稳定团队用),学习成本高- SQLServer完美支持- MySQL和PostgreSQL 有小坑,也可以解决
- Dapper (团队不稳定),低学习成本

开发环境搭建

  • 流程
- 新建业务类
- 建立配置类
- 建立DbContext类
- 迁移生成数据库
  • 安装SqlServer
- 安装:
Install-Package Microsoft.EntityFrameworkCore -Version 5.0.17
Install-Package Microsoft.EntityFrameworkCore.SqlServer -Version 5.0.17
Install-Package Microsoft.EntityFrameworkCore.Tools -Version 5.0.17- 踩坑: 如果安装的版本不兼容回滚的时候,调用方法的时候会出现各种无法识别的问题- 比如:  builder.ToTable("T_Books"); // ToTable()方法一直无法被识别
  • 新建业务类
// Book.cs......
namespace ConsoleAppORM
{class Book{public long Id { get; set; }public string Title { get; set; }public DateTime PubTime { get; set; }public double Price { get; set; }}
}// Person.cs......
namespace ConsoleAppORM
{public class Person{public long Id { get; set; }public string Name { get; set; }public int Age { get; set; }}
}
  • 新建配置类
// BookConfig.csusing Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;namespace ConsoleAppORM
{class BookConfig : IEntityTypeConfiguration<Book>{public void Configure(EntityTypeBuilder<Book> builder){ builder.ToTable("T_Books");}}
}// PersonConfig.csusing Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;namespace ConsoleAppORM
{public class PersonConfig : IEntityTypeConfiguration<Person>{public void Configure(EntityTypeBuilder<Person> builder){builder.ToTable("T_Persons");}}
}
  • 新建Context类
using Microsoft.EntityFrameworkCore;namespace ConsoleAppORM
{class MyDbContext:DbContext{public DbSet<Book> Books { get; set; }public DbSet<Person> Persons { get; set; }protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder){base.OnConfiguring(optionsBuilder);string connStr = "Server=.;Database=demo1;Trusted_Connection=True;MultipleActiveResultSets=true";optionsBuilder.UseSqlServer(connStr);}protected override void OnModelCreating(ModelBuilder modelBuilder){base.OnModelCreating(modelBuilder);modelBuilder.ApplyConfigurationsFromAssembly(this.GetType().Assembly);}}
}
  • 迁移数据库,创建迁移记录,最后再更新一下数据库
PM> ADD-Migration InitialCreate
Build started...
Build succeeded.PM> Update-Database
Build started...
Build succeeded.
......
Done.
  • 查看SqlServer刚刚创建的表
- 新建连接
- 服务器名称 填 . 或 (local) 或 localhost
- 身份验证 选 Windows 身份验证

Sqlserver

  • 如果表的结构有变更,需重新创建迁移记录并更新数据库
......
namespace ConsoleAppORM
{public class Person{......public int Age { get; set; }// 新增字段public string BirthPlace { get; set; }}
}- 创建迁移记录并刷新数据库// 给予此次的迁移记录取一个名字
PM> Add-Migration AddPersonBirthPlace
......
PM> Update-Database
......
Done.
PM> 
  • 表结构修改的又一示例
// Person.cs......namespace ConsoleAppORM
{public class Person{......public string BirthPlace { get; set; }# 新增public double? Salary { get; set; }}
}// Book.cs
......namespace ConsoleAppORM
{class Book{......# 新增public string AuthorName { get; set; }}
}// BookConfig.csusing Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;namespace ConsoleAppORM
{class BookConfig : IEntityTypeConfiguration<Book>{public void Configure(EntityTypeBuilder<Book> builder){builder.ToTable("T_Books");# 新增对字段的限制builder.Property(b => b.Title).HasMaxLength(50).IsRequired();builder.Property(b => b.AuthorName).HasMaxLength(20).IsRequired();}}
}// Dog.cs 新创建
......
namespace ConsoleAppORM
{public class Dog{public long Id { get; set; }public string Name { get; set; }public string Color { get; set; }}
}// DogConfig.cs 新创建
......
namespace ConsoleAppORM
{public class DogConfig : IEntityTypeConfiguration<Dog>{public void Configure(EntityTypeBuilder<Dog> builder){builder.ToTable("T_Dogs");}}
}// MyDbContext.csusing Microsoft.EntityFrameworkCore;namespace ConsoleAppORM
{class MyDbContext:DbContext{......# 注册public DbSet<Dog> Dogs { get; set; }protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder){......}protected override void OnModelCreating(ModelBuilder modelBuilder){......}}
}
  • 创建迁移记录并迁移(如果报错则不成功,根据异常来修复)
http://www.sczhlp.com/news/10973/

相关文章:

  • vue-router 加载动态路由不能动态引入解决方案
  • Daily Probs 2
  • 深入解析:B-树与B+树
  • 盘点迪士尼电影下载入口|迪士尼动画电影合集高清资源下载全平台支持
  • x86 机器 上拉取 ARM 架构的 Docker 镜像
  • 自定义导出逻辑
  • vulnyx Carlam writeup
  • eth 内存池pending机制以及按照nonce执行 - 若
  • 26_1 类与对象学习练习指导
  • 【上新啦】HarmonyOS官方模板优秀案例 (第2期:新闻行业 综合新闻)
  • 麒麟操作系统apt安装软件时报错默认禁用该源怎么处理
  • 一图胜千言:如何打造高专业度的技术博客/开源项目配图?
  • 面经学习-HTTP2的优点
  • 思通数科 AI视频监控:重构安防行业智能化新生态
  • 软考中级系统集成项目管理工程师近10年历史真题
  • 零基础学MCP(2)| MCP 开发环境配置
  • python编译单个.py到.pyc
  • 破解能源管控难题:MyEMS 开源系统的实战价值与创新路径
  • HarmonyOS SDK助力高德地图创新,带来便捷出行新体验
  • Gitee DevSecOps:军工软件研发转型的“智能引擎”
  • 2023年下半年中级系统集成项目管理工程师下午真题及答案解析
  • RHEL8,提取 DEV hosts升級安裝包,去PROD host 安裝
  • P4198 楼房修建 详解
  • linux 节约存储空间, 重复文件转换为硬链接
  • 短视频电商直播带货系统源码:核心功能与未来规划设计
  • python枚举enum
  • MyEMS 开源能源管理系统:重构能源秩序的技术密码
  • GreatSQL备份报错PROCESS权限不足分析与解决
  • LVM逻辑卷管理-磁盘分区与挂载
  • 端口镜像