[英]The INSERT statement conflicted with the FOREIGN KEY constraint The statement has been terminated
[英]EntityFramework 6: The INSERT statement conflicted with the FOREIGN KEY constraint Error but the parent record has been saved
我的数据库中有两个表Users
和JobSeekerEmploymentDetails
。
Users
---------------------------
ID int (Auto Generated Primary Key)
Col1 ...
JobSeekerEmploymentDetails
---------------------------
ID int (Auto Generated Primary Key)
Col1 ...
UserId int (Foreign Key to Users table)
要在上面的表中插入记录,我的代码如下:(我正在使用EntityFramework 6
和AutoMapper
)
public async Task<int> SaveJobSeeker(AccountInfoViewModel accountInfo, PersonalDetailViewModel personalDetail, EmploymentDetailsViewModel employmentDetails)
{
//create EF User object
var user = new User {CreatedOn = DateTime.Now};
//map data from the ViewModels into user class
Mapper.Map(accountInfo, user);
Mapper.Map(personalDetail, user);
using (var db = new ITWebEntities())
{
//save user
db.Users.Add(user);
await db.SaveChangesAsync();
//Create new EF class object and set recently saved user Id as foreign key value
var jobSeekerEmpDetail = new JobSeekerEmploymentDetail { UserId = user.ID };
//Map other detail from the ViewModel object
Mapper.Map(employmentDetails, jobSeekerEmpDetail);
//save emp details info
db.JobSeekerEmploymentDetails.Add(jobSeekerEmpDetail);
return await db.SaveChangesAsync();
}
}
现在, User
已保存到数据库中,我可以看到从保存的User
对象中成功检索到ID
的值。 但是最后一个db.SaveChangesAsync()
语句引发以下异常。
The INSERT statement conflicted with the FOREIGN KEY constraint "FK_EmploymentDetails_Users". The conflict occurred in database "ITWeb", table "dbo.Users", column 'ID'.
The statement has been terminated.
如下面的屏幕快照所示,已正确设置了约束:
我想我正在做一些愚蠢的事情,但我无法弄清楚。 你能帮我吗?
那很简单。 这行Mapper.Map(employmentDetails, jobSeekerEmpDetail);
实际上会覆盖我在上一步中正确设置的UserId
到0。 在执行映射并起作用之后,我将其代码更改为设置UserId
。
public async Task<int> SaveJobSeeker(AccountInfoViewModel accountInfo, PersonalDetailViewModel personalDetail, EmploymentDetailsViewModel employmentDetails)
{
//create EF User object
var user = new User {CreatedOn = DateTime.Now};
//map data from the ViewModels into user class
Mapper.Map(accountInfo, user);
Mapper.Map(personalDetail, user);
using (var db = new ITWebEntities())
{
//save user
db.Users.Add(user);
await db.SaveChangesAsync();
//Create new EF class object and set recently saved user Id as foreign key value
var jobSeekerEmpDetail = new JobSeekerEmploymentDetail();
//Map other detail from the ViewModel object
Mapper.Map(employmentDetails, jobSeekerEmpDetail);
jobSeekerEmpDetail.UserId = user.ID;
//save emp details info
db.JobSeekerEmploymentDetails.Add(jobSeekerEmpDetail);
return await db.SaveChangesAsync();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.