2017-02-03 3 views
1

После прочтения подобных вопросов мне все еще не удалось преодолеть эту проблему. Интересно, что я разобрался и сделал отдельный проект, и там он работает.«Объект сущности не может ссылаться на несколько экземпляров IEntityChangeTracker», в то время как я вставляю ситуацию «ко многим ко многим»?

У меня есть два объекта 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. Я не думаю, что это вызывает ошибку, я попытался удалить его и он все еще не работает.)

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(). To(). InRequestScope();

Я предвидел попытку изменить срок службы сущности. Версия структуры сущностей - 6.1.3, и я использую сначала код.

Я знаю, что это много кода, но, надеюсь, я был конкретным. Я просто не вижу проблемы.

Любое предложение?

Спасибо заранее, Ливиу

ответ

1

Я нашел исправление ... не обязательно решение. 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)); 
      } 
} 

Прямо сейчас я даже не понимаю, почему это работает.