0

私は次のコードを持っています:

public bool AddLeaveFormApprovers(List<LeaveFormApprovers> listToAdd)
{
    bool returnValue=false;
    try
    {
        using (LeaveRegulationEntities db = new LeaveRegulationEntities(ConnectionStringHelper.GetConnectionString(DaConstants.LeaveRegulationEntities)))
        {
            foreach(LeaveFormApprovers approvers in listToAdd)
            {
                approvers.AssignedLeave = db.AssignedLeave
                   .FirstOrDefault(a => a.AssignedLeaveID == approvers.AssignedLeave.AssignedLeaveID);
                approvers.LeaveFormApproverSys = db.LeaveFormApproverSys
                   .FirstOrDefault(a => a.LeaveFormApproverID == approvers.LeaveFormApproverSys.LeaveFormApproverID);
                db.LeaveFormApprovers.AddObject(approvers);
            }                    
            db.SaveChanges();
        }
        returnValue = true;
    }
    catch (Exception ex)
    {
        _Exceptions.ManageExceptions(ex);
    }
    return returnValue;
}

のリストはList<LeaveFormApprovers>、現在のコンテキストでオブジェクトを取得しているため、別のコンテキストからロードされます。

approvers.AssignedLeave = db.AssignedLeave
    .FirstOrDefault(a => a.AssignedLeaveID == approvers.AssignedLeave.AssignedLeaveID);
approvers.LeaveFormApproverSys = db.LeaveFormApproverSys
    .FirstOrDefault(a => a.LeaveFormApproverID == approvers.LeaveFormApproverSys.LeaveFormApproverID);

次のエラーが表示されます。

PRIMARY KEY 制約 'PK_ LeaveFor _B29C651847BE14B9' に違反しています。オブジェクト 'dbo.LeaveFormApproverSys' に重複するキーを挿入できません。

4

1 に答える 1

0

生成するクエリでlistToAdd追加してみてくださいAsNoTracking()。これにより、EF がエンティティを追跡し、後で再挿入しようとするのを停止する必要があります。

于 2012-05-22T08:59:20.027 に答える