c# - 无法使用种子数据初始化 DbContext
问题描述
在浏览器中启动站点时输入此函数
但它不会将数据添加到数据库中
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": "*"
}
解决方案
您可能还没有注册DbContext
inside Startup
。ConfigureServices(IServiceCollection services)
尝试在其中添加以下内容Startup.cs
:
services.AddDbContext<SchoolContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
可以在 MSDN 上的注册 SchoolContext教程:在 ASP.NET MVC Web 应用程序中开始使用 EF Core 中看到一个示例。
推荐阅读
- python - 旋转图像后如何跟踪像素位置?
- sql - SQL如何从所有客户中检索最后订购的2个列出的产品?
- python - 为什么 "lala" + int 需要转换为 str 而 "lala" * 2 不需要?
- excel - VBA 调整表大小会导致整个工作簿中的数据验证副本
- python-3.x - python中的FIFO缓冲区
- asp.net-core - 对象属性上缺少 ASP .NET Core 生成的 Swagger 描述
- java - Java DatagramChannel - 在一次“读取”调用中读取所有可用的数据报
- typescript - Typescript:如何引用数组定义的子类型?
- c# - 从 SQL Server 在 C# 中查询 JSON
- git - 如何在不丢失更改的情况下重做cherrypick的合并冲突解决方案(提交后)?