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的分享

posted @ 2024-04-02 11:45  点滴一言  阅读(10)  评论(0编辑  收藏  举报