首页 > 解决方案 > 无法使用种子数据初始化 DbContext

问题描述

  1. 在浏览器中启动站点时输入此函数

  2. 但它不会将数据添加到数据库中

public static class DbInitializer
{
    public static void Seed(AppDbContext context )
    {
        if (!context.Users.Any())
        {
            context.Users.AddRange(
                new User { Id = 1, Name = "jjjjjj", Password = "bbbb" },
                new User { Id = 2, Name = "zzzzz", Password = "ggggg" }
            );
            context.SaveChanges();
        }
    }
}

AppDbContext数据库实体

using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace task.Models
{
    public class AppDbContext : DbContext
    {

        public AppDbContext(DbContextOptions<AppDbContext> options)
            : base(options) { }

        public DbSet<User>Users { get; set; }
    }
}

User模型

namespace task.Models
{
    public class User
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Password { get; set; }
    }
}

DbInitializer

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace task.Models
{
    public static class DbInitializer
    {
        public static void Seed(AppDbContext context )
        {
            if (!context.Users.Any())
            {
                context.Users.AddRange(
                new User { Id = 1, Name = "jjjjjj", Password = "bbbb" },
                new User { Id = 2, Name = "zzzzz", Password = "ggggg" }

                );
               
                context.SaveChanges();
            }
        }
    }
}

Main功能

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using task.Models;

namespace task
{
    public class Program
    {
        public static void Main(string[] args)
        {
           var host= CreateWebHostBuilder(args).Build();
            using (var scope = host.Services.CreateScope())
            {
                var services = scope.ServiceProvider;

                try
                {
                    var context = services.GetRequiredService<AppDbContext>();
                    DbInitializer.Seed(context);
                }
                catch(Exception)
                {

                }
            }
            host.Run();

        }

        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>();
    }
}

appsettings.json带连接字符串

{
  "ConnectionStrings": {
    "DefaultConnection": "Server=DESKTOP-HP5LSH2\\SQLEXPRESS;Database=Dbtest;Trusted_Connection=True;MultipleActiveResultSets=true"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "AllowedHosts": "*"
}

标签: c#asp.net-core

解决方案


您可能还没有注册DbContextinside StartupConfigureServices(IServiceCollection services)尝试在其中添加以下内容Startup.cs

services.AddDbContext<SchoolContext>(options =>               
    options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

可以在 MSDN 上的注册 SchoolContext教程:在 ASP.NET MVC Web 应用程序中开始使用 EF Core 中看到一个示例。


推荐阅读