【发布时间】:2021-01-09 21:38:15
【问题描述】:
我正在使用 Entity Framework Core 并在 2 个表之间创建了一对多关系:
public class Fgf
{
public int FgfID { get; set; }
public string FGFName { get; set; }
...
public ICollection<ApplicationUser> ApplicationUsers { get; set; }
}
public class ApplicationUser : IdentityUser
{
public string FirstName { get; set; }
public string LastName { get; set; }
...
}
在这种情况下,EFCore 会在 ApplicationUser 中自动添加 FgfID 列,但我无法在控制器中访问它。
我正在尝试在 ApplicationUser 中添加 FgfID
public class ApplicationUser : IdentityUser
{
public string FirstName { get; set; }
public string LastName { get; set; }
...
public int FgfID { get; set; }
public Fgf Fgf { get; set; }
}
我有一个表单,我在其中创建了一个 FGF 并为他分配了一个带有选择列表的用户。我正在使用带有 POST 操作的简单表单。我没有使用模型作为表单,因为我在此 Razor 页面上有另一个表单。
在我的控制器中:
[HttpPost]
public async Task<IActionResult> NewFgf(string FGFName, string ApplicationUser)
{
if (ModelState.IsValid) {
var fgf = new Fgf
{
FGFName = FGFName,
};
var usertoupdate = await _context.Users
.Where(c=> c.Id == ApplicationUser)
.SingleOrDefaultAsync();
usertoupdate.FgfID = fgf.FgfID;
_context.Users.Update(usertoupdate);
_context.Add(fgf);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
return View();
}
我得到的错误是:
SqlException:UPDATE 语句与 FOREIGN KEY 约束“FK_AspNetUsers_Fgf_FgfID”冲突。冲突发生在数据库“aspnet-StreamPixelVer2-3E2C2112-15B8-48A4-8619-4773C5ADBFBD”、表“dbo.Fgf”、列“FgfID”中。 声明已终止。
我做错了什么?将数据保存到与 Asp.net Core 具有多对一、一对多关系的数据库的最佳做法是什么?
【问题讨论】:
-
更新前添加
fgf?
标签: c# asp.net-core .net-core entity-framework-core one-to-many