У меня большая проблема с некоторых дней, и я очень новичок в Entity Framework.У меня есть 2 лица: группа и новости.Новости видны одной или нескольким группам.Я использую два репозитория (newsRepository и groupsRepository).
Это мой метод создания новостей:
public ActionResult Create()
{
return View(new CreateNewsViewModel(new News()));
}
[HttpPost]
public ActionResult Create(CreateNewsViewModel model)
{
model.news.CategoryId = Int32.Parse(Request.Form["news.CategoryId"]);
if (ModelState.IsValid)
{
News news = new News();
DateTime date = DateTime.Now;
//AuthorId a recuperer
news.AuthorId = 1;
news.Title = IntranetTools.UppercaseFirst(model.news.Title.Trim());
news.Content = model.news.Content;
news.IsVisible = Request.Form["news.IsVisible"].Contains("true");
news.CreateDate = date;
news.PublicationDate = date;
news.LastChangedDate = date;
news.CategoryId = model.news.CategoryId;
// Collection des groupes concernés
foreach (var c in model.allGroups)
{
if (Request.Form["" + c.GroupId].Contains("true"))
{
News.Groups.Add(c);
}
}
_newsRepository.AddToNewsSet(news);
_newsRepository.SaveChanges();
return Redirect("/NewsAdmin/Index/");
}
return View(model);
}
Я говорю, что все мои группы уже созданы.Я просто хочу вставить группы (выбранные пользователем с помощью флажков).В моем «CreateNewsViewModel» я создаю список групп, который содержит все существующие группы в моей БД.Я получаю список в моем представлении через цикл «foreach» и создаю флажок для каждой группы.
Я повторно использую тот же список в моем контроллере для сравнения, если флажки были отмечены.Для каждого «истинного» значения я добавляю группы в коллекцию групп моих новостей (только что созданных).
При этом я получаю следующее сообщение об ошибке:
«Объект сущностина несколько экземпляров IEntityChangeTracker нельзя ссылаться ». (в строке _newsRepository.AddToNewsSet (news);)
Я пробую некоторые решения, но все еще не понимаю, как решить эту проблему.
Спасибо за все
Редактировать
На самом деле, если я использую явно два контекста и отсоединяю / присоединяю свои объекты к другому контексту, это нормально, и яУ меня нет ошибок.
ObjectContext context = _newsRepository.Context;
ObjectContext context2 = _groupsRepository.Context;
foreach (var c in groups)
{
if (Request.Form["" + c.GroupId].Contains("true"))
{
context2.Detach(c);
context.Attach(c);
news.Groups.Add(c);
}
}
Я хотел бы использовать решение Ладислава Мрнки и использовать внедрение зависимостей (я использую инфраструктуру Ninject), чтобы передать один и тот же ObjectContext моим репозиториям (при обработке одного запроса).Я понимаю концепцию, но не знаю, как ее кодировать.