Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# &引用;一个实体对象不能被IEntityChangeTracker的多个实例引用;当我插入多对多情况时?_C#_Entity Framework_Entity Framework 6 - Fatal编程技术网

C# &引用;一个实体对象不能被IEntityChangeTracker的多个实例引用;当我插入多对多情况时?

C# &引用;一个实体对象不能被IEntityChangeTracker的多个实例引用;当我插入多对多情况时?,c#,entity-framework,entity-framework-6,C#,Entity Framework,Entity Framework 6,在阅读了类似的问题后,我仍然没有设法克服这个问题。有趣的是,我分离并制作了一个单独的项目,它在那里工作 我有两个实体JobAnnouncement和Skill,它们处于多对多关系中。我可以插入,只要我没有任何技能添加到工作公告 让我输入代码: public class JobAnnouncement { public int Id { get; set; } public DateTime DateAdded { get; set; } /

在阅读了类似的问题后,我仍然没有设法克服这个问题。有趣的是,我分离并制作了一个单独的项目,它在那里工作

我有两个实体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; }
    }
仅供参考,我确实重写了SaveChanges()方法(这就是我保留DateAdded的原因。我认为这不是导致错误的原因,我尝试删除了它,但它仍然不起作用。)

此外,我正在使用Niject,在SO上找到的说明没有帮助: kernel.Bind().To().InRequestScope()

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

我知道这是很多代码,但希望我是具体的。我只是不明白这个问题

有什么建议吗

提前感谢,,
利维我找到了一个解决办法。。。不一定是解决办法。AddJobAnnouncement应该如下所示:

 public void AddJobAnnouncement(JobAnnouncement jobAnnouncemnet)
        {
_jobAnnouncement.Content = jobAnnouncemnet.Content; //ok
_jobAnnouncement.CompanyId = jobAnnouncemnet.CompanyId; //ok
 // it will by ok now
jobAnnouncement.Skills = new List<Skill>();
            foreach (var skill in jobAnnouncemnet.Skills)
            {
                _jobAnnouncement.Skills.Add(db.Skills.Find(skill.Id));
            }
}
public void AddJobAnnouncement(JobAnnouncement jobAnnouncemnet)
{
_jobAnnouncement.Content=jobAnnouncemnet.Content;//确定
_jobAnnouncement.CompanyId=jobAnnouncemnet.CompanyId;//确定
//现在可以了
jobAnnouncement.Skills=新列表();
foreach(工作技能中的var技能)
{
_jobAnnouncement.Skills.Add(db.Skills.Find(skill.Id));
}
}
现在我甚至都不知道它为什么有效

 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;
                    }
                }
    }
    }
 public void AddJobAnnouncement(JobAnnouncement jobAnnouncemnet)
        {
_jobAnnouncement.Content = jobAnnouncemnet.Content; //ok
_jobAnnouncement.CompanyId = jobAnnouncemnet.CompanyId; //ok
 // it will by ok now
jobAnnouncement.Skills = new List<Skill>();
            foreach (var skill in jobAnnouncemnet.Skills)
            {
                _jobAnnouncement.Skills.Add(db.Skills.Find(skill.Id));
            }
}