Я попробовал несколько найденное решение в стеке и в Интернете я потерял целый день работы за это, пожалуйста, взгляните на мой кодОшибка «Объект сущности не может ссылаться на несколько экземпляров IEntityChangeTracker». : как правильно обновлять дочерние объекты?
public async Task<ActionResult> Edit(JobeezUserInfoViewModel jobeezUserInfo, HttpPostedFileBase UploadedImage)
{
var user = UserManager.FindById(User.Identity.GetUserId());
//list of languages
var lgs = jobeezUserInfo.Languages.Select(l => l.LanguageId);
//Languages to be deleted
var lngTodel = db.Languages.AsNoTracking()
.Where(ut => ut.JobeezUserInfoId == jobeezUserInfo.ApplicationUserId)
.Where(ut => !lgs.Contains(ut.LanguageId));
//language ids as Ilist for better performace
var ids = lgs as IList<int> ?? lgs.ToList();
//Languages to be added
var lngToAdd = ids
.Where(
lid =>
user.JobeezUserInfo.Languages
.Select(ut => ut.LanguageId) //for each userlanguages create a list if languageids _
.Contains(lid) == false //_check if it does not contain the posted languageids and return the language ids if it is the case(tid is the posted languageid)
)
.Select(tid =>
new Language()
{
JobeezUserInfoId = user.Id,
LanguageId = tid,
Name = Enum.GetName(typeof(Enums.LanguageEnum), tid)
});
//languages to be updated
var lngToUpdate = user.JobeezUserInfo.Languages.Where(l=>ids.Contains(l.LanguageId));
Mapper.CreateMap<JobeezUserInfoViewModel, JobeezUserInfo>(MemberList.Destination);
JobeezUserInfo info = Mapper.Map<JobeezUserInfo>(jobeezUserInfo) as JobeezUserInfo;
user.FirstName = jobeezUserInfo.FirstName;
user.LastName = jobeezUserInfo.LastName;
user.PostCode = jobeezUserInfo.PostCode;
user.PhoneNumber = jobeezUserInfo.Telephone;
if (ModelState.IsValid)
{
//mark modified for the userinfo
db.JobeezUserInfo.Attach(info); // Entity is in Unchanged state
db.Entry(info).State = EntityState.Modified;
, а следующая строка это - Мой вопрос, почему я не могу прикрепить объект языка «л»
lngToUpdate.ForEach(l =>
{
db.Languages.Attach(l);
db.Entry(l).State = EntityState.Modified;
});
у меня есть ошибка
«объект лицо не может ссылаться несколько экземпляров IEntityCha ngeTracker «.
Я открыл быстрый взгляд После следующая строка (одна часть изображения показывает также входные параметры моего Controler действия (ViewModel объекта):
//mark modified for the userinfo
db.JobeezUserInfo.Attach(info); // Entity is in Unchanged state
Precision : языковой объект в db.changetracket.Entities() - это тот же объект, который отправлен на мой сервер (в моей модели viewModel), почему инфраструктура enitity не может понять, что новый объект должен быть отслежен или привязан вместо нового языкового объекта (Мой код является частичным для клана rity я могу опубликовать полный код, если необходимо) Мой вопрос: я действительно не знаю, что является лучшим методом для правильного обновления дочерних объектов. Что я делаю неправильно здесь и как получить эту работу? заранее спасибо
Вам, вероятно, придется отличать 'lngToUpdate'. –
действительно не здорово, что он никуда не объяснил, даже не объяснив, что это похоже на то, что мы могли бы квалифицировать во Франции как «c'est rat, mais et merci de votre gentillesse!». @GertArnold список отличается. независимо от того, что он сбой при первой итерации! проблема в том, что список языков не может быть прикреплен, потому что theEF отслеживает список языков, найденный в моем представлении. Спасибо, спасибо! Я не знаю, как я могу заменить этот отслеживаемый объект моим новым списком.? иногда EF действительно сложно с некоторыми из его утилит. –