簡體   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