5. MVC使用SqlServer进行增删改查+通过数据迁移生成数据库
操作环境为.NET8
第一步,创建一个简易的MVC:
第二步,应用SqlServer,以及数据迁移包:
Microsoft.EntityFrameworkCore.SqlServer
Microsoft.EntityFrameworkCore.Design --数据迁移包
第三步,添加一个Data文件夹,在里面创建两个类用于操作
public class Blog
{
public int BlogId { get; set; }
public string? Url { get; set; }
public List<Post> Posts { get; } = new();
}
public class Post
{
public int PostId { get; set; }
public string? Title { get; set; }
public string? Content { get; set; }
public int BlogId { get; set; }
public Blog? Blog { get; set; }
}
第四步,添加一个类BlogContext,用于数据库上下文,作用是类与数据库的桥梁,两两连接,用于操作交互
第五步,数据连接
(1)在Program.cs文件中,通过服务注入的形式添加连接
builder.Services.AddDbContext<BlogContext>(item =>
{
item.UseSqlServer(builder.Configuration.GetConnectionString("SQL"));
});
(2)在appsettings.json文件中,配置数据库连接字符
"ConnectionStrings": {
"SQL": "server=LONGYI;uid=sa;pwd=123456;database=blogging;TrustServerCertificate=true",
"MySQL": "server=127.0.0.1;uid=root;pwd=123456;database=blogging"
}
// LONGYI也可为:127.0.0.1 本地
注意项:
Program.cs文件中的“SQL”为:appsettings.json文件配置SQL连接;
增加证书信任的配置。;TrustServerCertificate=true
第六步,数据连接与上下文绑定(通过构造函数绑定)
public class BlogContext:DbContext { /// <summary> /// DbContextOptions<BlogContext> 指定上下文 /// :base(options) 传递进父方法 /// 通过服务注入的形式,读取Program.cs配置的链接字符串 /// </summary> /// <param name="options"></param> public BlogContext(DbContextOptions<BlogContext> options):base(options) { } #region 表名 public DbSet<Blog> blogs { get; set; } public DbSet<Post> posts { get; set; } #endregion }
第七步,数据迁移
控制台迁移命令:
dotnet ef migrations add Init --dotnet ef:ef工具 --migrations:数据迁移 --add:添加 --Init:数据迁移的名称,可定义
dotnet ef database update
VS2022迁移命令:
操作前,要删除已生成的db文件,和项目中生成的Migrations文件
PM> Add-Migration Init
PM> Update-Database
成功后,会在SqlServer中生成一个数据库
说明:
__EFMigrationsHistory:指的是迁移时的历史记录,迁移几次,表就会有几条记录数据;
第八步,生命周期
private readonly ILogger<HomeController> _logger; private readonly BlogContext _context; public HomeController(ILogger<HomeController> logger, BlogContext context) { _logger = logger; _context = context; } public IActionResult Index() { // 添加 _context.blogs.Add(new Data.Blog() { Url = "http://qweqweqweqw.com" }); _context.SaveChanges(); return View(); }
_context.blogs.Add与Index()方法生命周期是一样的,也就是当方法执行完,
_context也将会被销毁,销毁的动作是由IOC容器进行的
源代码位置:
链接:https://pan.baidu.com/s/1MjsstmLCxMcZpncONDrDNg
提取码:1hvn
--来自百度网盘超级会员V6的分享
C#相关写法