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