【发布时间】:2026-02-10 04:50:01
【问题描述】:
我使用种子将默认数据输入数据库,但我遇到了一个问题,即FK, 如何毫无问题地将 FK 的值传递给两个表?
运行程序时出现此错误: SqlException:INSERT 语句与 FOREIGN KEY 约束“FK_AspNetUsers_Departments_DepartmentId”冲突。数据库“HRS.WEB1”、表“dbo.Departments”、“Id”列中发生冲突。 声明已终止。
public static class DbSeeder
{
public static IHost SeedDb(this IHost webHost)
{
using var scope = webHost.Services.CreateScope();
try
{
var context = scope.ServiceProvider.GetRequiredService<HRSDbContext>();
var userManager = scope.ServiceProvider.GetRequiredService<UserManager<Employee>>();
context.SeedDepartment().Wait();
userManager.SeedEmployee().Wait();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
throw;
}
return webHost;
}
public static async Task SeedDepartment(this HRSDbContext _db)
{
if (await _db.Departments.AnyAsync())
{
return;
}
var departments = new List<Department>();
var department = new Department();
department.Name = "A1";
department.Id = 1;
department.CreatedAt = DateTime.Now;
var department2 = new Department();
department2.Name = "A2";
department2.Id = 2;
department2.CreatedAt = DateTime.Now;
departments.Add(department);
departments.Add(department2);
await _db.Departments.AddRangeAsync(departments);
await _db.SaveChangesAsync();
}
public static async Task SeedEmployee(this UserManager<Employee> userManger)
{
if (await userManger.Users.AnyAsync())
{
return;
}
var user = new Employee();
user.FullName = "System Developer";
user.UserName = "dev@gmail.com";
user.Email = "dev@gmail.com";
user.CreatedAt = DateTime.Now;
await userManger.CreateAsync(user, "Admin111$$");
}
}
【问题讨论】:
-
那里是什么关系,员工需要部门密钥吗?
-
是的,员工需要部门密钥,关系是一对多
-
好吧,当您为员工播种时,您不会传递 DepartmentId。
-
这是我面临的问题,当我为员工播种时,我不知道如何传递 DepartmentId !!
标签: asp.net database entity-framework asp.net-identity seeding