繁体   English   中英

EntityFramework 6:INSERT语句与FOREIGN KEY约束冲突,但父记录已保存

[英]EntityFramework 6: The INSERT statement conflicted with the FOREIGN KEY constraint Error but the parent record has been saved

我的数据库中有两个表UsersJobSeekerEmploymentDetails

Users
---------------------------
ID        int (Auto Generated Primary Key)
Col1      ...

JobSeekerEmploymentDetails
---------------------------
ID        int (Auto Generated Primary Key)
Col1      ...
UserId    int (Foreign Key to Users table)

要在上面的表中插入记录,我的代码如下:(我正在使用EntityFramework 6AutoMapper

    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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM