【发布时间】:2022-01-09 00:48:39
【问题描述】:
我刚刚开始使用 SQL,并试图让我的第一个示例正常工作。我有两个具有一对多关系的表:
public class Customer
{
public Guid Id { get; set; }
public string CompanyName { get; set; }
public string Address { get; set; }
public virtual ICollection<Project> Projects { get; set; }
}
和
public class Project
{
public Guid Id { get; set; }
public string Name { get; set; }
public string ProjectType { get; set; }
public Customer Customer { get; set; }
}
然后我通过 API ProjectsController 执行以下命令:
[HttpPost]
public async Task<IActionResult> Post(Project project)
{
Customer newCustomer = _context.Customers
.FirstOrDefault(c => c.Id == project.Customer.Id);
Project newProject = new Project
{
Name = project.Name,
ProjectType = project.ProjectType,
Customer = newCustomer,
};
_context.Projects.Add(newProject);
await _context.SaveChangesAsync();
return Ok(newProject.Id);
}
但是,由于我在数据库中已经有一个具有此 ID 的客户,所以我遇到了一个异常(在创建新项目时,无需创建新客户;客户是从项目创建对话框的下拉框中选择的) :
Microsoft.EntityFrameworkCore.DbUpdateException:保存实体更改时出错。有关详细信息,请参阅内部异常。
Microsoft.Data.SqlClient.SqlException (0x80131904):违反主键约束“PK_ProjectStates”。无法在对象“dbo.ProjectStates”中插入重复键。重复键值为 (057cfca4-934b-40a4-a3f8-44840e532f4a)。声明已终止。
如何正确地做到这一点?
【问题讨论】: