我使用種子將默認資料輸入資料庫,但我面臨一個問題,即 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 = "[email protected]";
user.Email = "[email protected]";
user.CreatedAt = DateTime.Now;
await userManger.CreateAsync(user, "Admin111$$");
}
}
uj5u.com熱心網友回復:
有多種方法可以做到這一點,我不知道您模型的確切結構,但無論如何日志都應該相同:
首先 - 硬值:
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 = "[email protected]";
user.Email = "[email protected]";
user.CreatedAt = DateTime.Now;
user.DepartmentId = 1; //here
await userManger.CreateAsync(user, "Admin111$$");
}
第二 - 回傳您添加的部門,然后將其作為引數傳遞:
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>>();
var departments = context.SeedDepartment().Wait();
userManager.SeedEmployee(departments.First().Id ).Wait();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
throw;
}
return webHost;
}
public static async Task<IEnumerable<Department>> SeedDepartment(this HRSDbContext _db)
{
var _departments = await _db.Departments.AllAsync()
if (_departments != null)
{
return _departments;
}
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();
return departments;
}
public static async Task SeedEmployee(this UserManager<Employee> userManger, int departmentId)
{
if (await userManger.Users.AnyAsync())
{
return;
}
var user = new Employee();
user.FullName = "System Developer";
user.UserName = "[email protected]";
user.Email = "[email protected]";
user.CreatedAt = DateTime.Now;
user.DepartmentId = departmentId;
await userManger.CreateAsync(user, "Admin111$$");
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/340472.html
標籤:asp.net 数据库 实体框架 asp.net 身份 播种
