自跟踪实体 SaveChanges() 在多对多关系中添加实体时出现异常

Posted

技术标签:

【中文标题】自跟踪实体 SaveChanges() 在多对多关系中添加实体时出现异常【英文标题】:Self Tracking Entities SaveChanges() Exception when add entity in many to many relation 【发布时间】:2012-09-01 01:51:03 【问题描述】:

我有 2 个实体对象“Persons”和“Seminar”。关系 - 多对多。一个项目包括 - EF4.0/STE、WCF 和 WinForms。

当我尝试将人员添加到研讨会时

 public void AddPersonsToSeminar(Seminar seminar, List<Person> persons)
        
            using (T3EntitiesConn context = new T3EntitiesConn())
            
                if (seminar != null)
                
                    context.Seminar.Attach(seminar);

                    foreach (Person person in persons)
                    
                        if (!seminar.Person.Any(p => p.ID == person.ID))
                        
                            seminar.Person.Add(person);
                            context.Seminar.ApplyChanges(seminar);
                        
                    
                    context.SaveChanges();

我有例外 -

The property 'ID' is part of the object's key and cannot be changed. Changes to key properties can only be made when the object is not being tracked or is in the Added state.

请解释一下如何解决它 谢谢

【问题讨论】:

题外话,“persons”应改为“people”。 【参考方案1】:

可能是您的研讨会和人员来自不同的对象上下文并且您正在创建新上下文的问题。您正确地将研讨会附加到该上下文中,但是您是从旧上下文中将人员添加到新创建的上下文中?

【讨论】:

以上是关于自跟踪实体 SaveChanges() 在多对多关系中添加实体时出现异常的主要内容,如果未能解决你的问题,请参考以下文章

如何在多对多关系上使用休眠和 JPA 删除孤立实体?

NSPredicate 在多对多关系中

Symfony 3.4 - 如果在多对多关系上不存在,则持续存在

学说2:在多对多关系中引用连接表

Hibernate多对多操作

多对多(自相关)特定订单实体框架