Отношения между двумя объектами не могут быть определены, потому что они присоединены к различным объектам ObjectContext mvc 2 - PullRequest
6 голосов
/ 04 апреля 2011

Я новичок в структуре сущностей, поэтому, пожалуйста, потерпите меня ...

Как я могу связать два объекта из разных контекстов вместе?

Пример ниже выдает следующее исключение:

System.InvalidOperationException: связь между двумя объектами не может быть определена, поскольку они присоединены к различным объектам ObjectContext.

    [OwnerOnly]
    [HttpPost]
    [ValidateInput(false)]
    public ActionResult Create(BlogEntryModel model)
    {
        if (!ModelState.IsValid)
            return View(model);
        var entry = new BlogEntry
        {
            Title = model.Title,
            Content = model.Content,
            ModifiedDate = DateTime.Now,
            PublishedDate = DateTime.Now,
            User = _userRepository.GetBlogOwner()
        };
        _blogEntryRepository.AddBlogEntry(entry);
        AddTagsToEntry(model.Tags, entry);
        _blogEntryRepository.SaveChange();
        return RedirectToAction("Entry", new { Id = entry.Id });
    }

    private void AddTagsToEntry(string tagsString, BlogEntry entry)
    {
        entry.Tags.Clear();
        var tags = String.IsNullOrEmpty(tagsString)
                       ? null
                       : _tagRepository.FindTagsByNames(PresentationUtils.ParseTagsString(tagsString));
        if (tags != null)
            tags.ToList().ForEach(tag => entry.Tags.Add(tag));             
    }

Я прочитал много сообщений об этом исключении, но ни один не дает мне рабочий ответ ...

1 Ответ

7 голосов
/ 04 апреля 2011

Ваши различные репозитории _userRepository, _blogEntryRepository, _tagRepository, кажется, имеют все свои ObjectContext.Вы должны выполнить рефакторинг этого и создать ObjectContext вне репозиториев, а затем внедрить его в качестве параметра (для всех репозиториев один и тот же ObjectContext), например:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...