“Entity.Attach上的ObjectStateManager中已存在具有相同键的对象”

时间:2012-10-08 00:20:01

标签: linq entity-framework c#-4.0

我首先使用实体​​框架代码

[Serializable]
    public class Emp
    {
        public int EmpId { get; set; }
        public byte TitleId { get; set; }
        [MaxLength(50)]
        public string FirstName { get; set; }
        [MaxLength(50)]
        public string Surname { get; set; }
        public byte Type { get; set; }

        public List<PracticeEmp> PracticeEmps { get; set; }
    }

[Serializable]
    public class PracticeEmp
    {
        public int PracticeStaffId { get; set; }
        public int PracticeId { get; set; }
        public int EmpId { get; set; }
        public DateTime? StartDate { get; set; }
        public DateTime? EndDate { get; set; }

        public Emp Emp { get; set; }
    }

当我尝试将数据插入到PracticeEmps表中时,已经存在的人员使用以下代码

Db.Current.Emps.Attach(practiceEmp.Emp);
Db.Current.PracticeEmps.Add(practiceEmp);

此代码段在attach方法上返回错误“ObjectStateManager中已存在具有相同键的对象.ObjectStateManager无法使用相同的键跟踪多个对象。”

任何想法......

1 个答案:

答案 0 :(得分:2)

如果您附加的Emp实例具有对它的引用并且它不是上下文的一部分,那么

practiceEmp实例将自动附加到您的上下文。请注意,两个实体都处于Unchanged状态,这是附加实体的默认状态。