.NET Core - MVC 应用中使用数据库

  MvcMovieContext 对象处理连接到数据库并将 Movie 对象映射到数据库记录的任务。

  向 文件中的依赖关系注入容器数据库上下文:

  例:

    var builder = WebApplication.CreateBuilder(args);

    builder.Services.AddDbContext<MvcMovieContext>(options =>

      options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext") ?? throw new InvalidOperationException("Connection string 'MvcMovieContext' not found.")));

  .NET Core配置系统会读取键。

  进行本地开发时,它从appsettings.json文件获取连接字符串

  例:

    "ConnectionStrings": {

      "MvcMovieContext": "Server=(localdb)\\mssqllocaldb;Database=MvcMovieContext-7dc5b790-765f-4381-988c-5167405bb107;Trusted_Connection=True;MultipleActiveResultSets=true"
    }

 

1. SQL Server Express LocalDB

  LocalDB:

    • 是 SQL Server Express 数据库引擎的一个轻量级版本,默认与 Visual Studio 一起安装。
    • 使用连接字符串按需启动。
    • 面向程序开发。 它在用户模式下运行,因此没有复杂的配置。
    • 默认情况下,在 C:/Users/{user} 目录中创建 .mdf 文件。

2. 设定数据库种子

  在Models文件夹中创建一个名为SeedData的新类。将生成的代码替换为以下代码:

    using Microsoft.EntityFrameworkCore;

    using Microsoft.Extensions.DependencyInjection;
    using MvcMovie.Data;
    using System;
    using System.Linq;

    namespace MvcMovie.Models
    {
      public static class SeedData
      {
        public static void Initialize(IServiceProvider serviceProvider)
        {
          using (var context = new MvcMovieContext(
          serviceProvider.GetRequiredService<
          DbContextOptions<MvcMovieContext>>()))
          {
            // Look for any movies.
            if (context.Movie.Any())
            {
              return; // DB has been seeded
            }

            context.Movie.AddRange(
              new Movie
              {
                Title = "When Harry Met Sally",
                ReleaseDate = DateTime.Parse("1989-2-12"),
                Genre = "Romantic Comedy",
                Price = 7.99M
              },

              new Movie
              {
                Title = "Ghostbusters ",
                ReleaseDate = DateTime.Parse("1984-3-13"),
                Genre = "Comedy",
                Price = 8.99M
              },

              new Movie
              {
                Title = "Ghostbusters 2",
                ReleaseDate = DateTime.Parse("1986-2-23"),
                Genre = "Comedy",
                Price = 9.99M
              },

              new Movie
              {
                Title = "Rio Bravo",
                ReleaseDate = DateTime.Parse("1959-4-15"),
                Genre = "Western",
                Price = 3.99M
              }
            );
            context.SaveChanges();
          }
        }
      }
    }

  如果数据库中有任何电影,则会返回种子初始值设定项,并且不会添加任何电影。

    if (context.Movie.Any())

    {
      return; // DB has been seeded.
    }

3. 添加种子初始值设定项

  将 Program.cs新增代码:

    using MvcMovie.Models;

    var app = builder.Build(); 后加:

      using (var scope = app.Services.CreateScope())

      {

        var services = scope.ServiceProvider;

        SeedData.Initialize(services);

      }

  删除数据库中的所有记录。

  测试应用。 通过调用 Program.cs 文件中的代码强制应用初始化,使种子方法能够正常运行。

  若要强制初始化,请关闭 Visual Studio 打开的命令提示符窗口,然后按 Ctrl + F5 重新启动。

  应用将显示设定为种子的数据。

posted @ 2022-06-28 17:33  大师兄被妖怪抓走了  阅读(236)  评论(0编辑  收藏  举报