" IEntityChangeTracker"的多个实例不能引用实体对象。当我插入多对多的情况时?

时间:2017-02-03 15:05:24

标签: c# entity-framework entity-framework-6

在阅读类似问题后,我仍然无法克服这个问题。有趣的是,我解耦并制作了一个单独的项目,并且在那里工作。

我有两个实体JobAnnouncement和Skill,他们处于多对多的关系中。只要我没有在工作公告中添加任何技能,我就可以插入。

让我输入代码:

public class JobAnnouncement
    {
        public int Id { get; set; }
        public DateTime DateAdded { get; set; }
        //other properties
        public virtual ICollection<Skill> Skills { get; set; }
    }

public class Skill
    {
//other properties
 public virtual ICollection<JobAnnouncement> JobAnnouncements { get; set; }
    }

插入代码是(尝试各种方式,包括愚蠢的方式):

 public void AddJobAnnouncement(JobAnnouncement jobAnnouncemnet)
        {
_jobAnnouncement.Content = jobAnnouncemnet.Content; //ok
_jobAnnouncement.CompanyId = jobAnnouncemnet.CompanyId; //ok
 _jobAnnouncement.Skills = jobAnnouncemnet.Skills; //fails
db.JobAnnouncements.Add(_jobAnnouncement); //throws exception
            db.SaveChanges();
}

仅仅为了您的信息,我确实覆盖了SaveChanges()方法(这就是我离开DateAdded的原因。我不认为导致错误,我试着删除它并且它仍然没有&#39工作。)

 public override int SaveChanges()
        {
    foreach (var entry in ChangeTracker.Entries().Where(entry => entry.Entity.GetType().GetProperty("DateAdded") != null))
                {
                    if (entry.State == EntityState.Added)
                    {
                        entry.Property("DateAdded").CurrentValue = DateTime.Now;
                    }

                    if (entry.State == EntityState.Modified)
                    {
                        entry.Property("DateAdded").IsModified = false;
                    }
                }
    }
    }

另外,我正在使用Niject,在SO上找到的指令没有帮助:  kernel.Bind()向()InRequestScope();

我试图改变实体的生命周期。实体框架的版本是6.1.3,我首先使用代码。

我知道很多代码,但希望我具体。我只是没有看到这个问题。

有什么建议吗?

提前致谢, 利维乌

1 个答案:

答案 0 :(得分:2)

我找到了一个解决方案......不一定是解决方案。 AddJobAnnouncement应如下所示:

double i, max = pow(2, 32);
char *temp;
for (i = 0; i < max; i++) 
{
   temp = (char *) i;       
   //some code involving *temp    
}

现在我甚至不知道为什么会这样。