2011-04-04 24 views
6

I principiantes al marco de la entidad, así que por favor tengan paciencia conmigo ...La relación entre los dos objetos no se puede definir porque están unidos a diferentes ObjectContext objetos MVC 2

¿Cómo puedo relacionar dos objetos de diferentes contextos ¿juntos?

El siguiente ejemplo tiros la siguiente excepción:

System.InvalidOperationException: La relación entre los dos objetos no se puede definir porque están unidos a diferentes objetos 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));    
    } 

He leído un montón de mensajes sobre esta excepción, pero ninguno me dio una respuesta de trabajo ...

Respuesta

7

Sus diversos repositorios _userRepository, _blogEntryRepository, _tagRepository parecen tener todo su propia ObjectContext. Usted debe refactorizar esto y crear el ObjectContext fuera de los repositorios y luego inyectarla como parámetro (para todos los repositorios de la misma ObjectContext), así:

public class XXXRepository 
{ 
    private readonly MyObjectContext _context; 

    public XXXRepository(MyObjectContext context) 
    { 
     _context = context; 
    } 

    // Use _context in your repository methods. 
    // Don't create an ObjectContext in this class 
} 
+0

adición a @ respuesta de Slauma: No se puede relacionar objetos adjuntos a diferentes contextos. La única forma es separar un objeto del primer contexto y adjuntarlo al segundo. Es mucho más complejo que simplemente compartir el contexto entre repositorios. –

Cuestiones relacionadas