«На объектный объект нельзя ссылаться несколькими экземплярами IEntityChangeTracker», пока я добавляю ситуацию «многие ко многим»?

2

После прочтения подобных вопросов мне все еще не удалось преодолеть эту проблему. Интересно, что я разобрался и сделал отдельный проект, и там он работает.

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

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

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

Спасибо заранее, Liviu

Теги:
entity-framework
entity-framework-6

1 ответ

2

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню