asp.Net Core一对多关系UPDATE语句与FOREIGN KEY约束冲突



我正在使用实体框架核心,并在两个表之间创建了一对多关系:

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。FgfID,试试这个:

using Microsoft.EntityFrameworkCore.ChangeTracking;
.....
....
var usertoupdate = await _context.Set<ApplicationUser>()
.Where(c=> c.Id == applicationUser.Id)
.SingleOrDefaultAsync();
var fgf = new Fgf
{
FGFName = FGFName,                    
};  

fgf.ApplicationUsers = new ObservableCollectionListSource<ApplicationUser>();
fgf.ApplicationUsers.Add(usertoupdate);  
_context.Set<Fgf>().Add(fgf);
await _context.SaveChangesAsync();

最新更新