2011-04-04 18 views
6

Ben başlayanlar nesneleri, bu yüzden farklı bağlamlarda iki nesneleri ilgili olabilir nasıl ... Benimleiki nesne arasındaki ilişki tanımlanamaz varlık çerçevesine mvc 2

ayı lütfen birlikte?

System.InvalidOperationException:

Aşağıdaki örnek, aşağıdaki özel durum farklı ObjectContext nesnelere bağlı olduğu için iki nesne arasındaki ilişki tanımlanamaz. Bu özel durum hakkında mesajların çok şey okudum ama hiçbiri bana bir çalışma cevap vermek

[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));    
    } 

...

cevap

7

Kişisel çeşitli depoları _userRepository, _blogEntryRepository, _tagRepository kendi ObjectContext hepsine sahip görünmektedir. Çok gibi bu refactor ve (hepsi aynı ObjectContext havuzlarınıza için) bir parametre olarak enjekte sonra depoları dışında ObjectContext oluşturmak ve olmalıdır:

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

ilavesi @ için Slauma cevabı: Sen ekli nesneleri ilişki kuramıyorum farklı bağlamlara. Tek yol, ilk içerikten bir nesneyi ayırmak ve ikincisine bağlamaktır. Çok daha karmaşıktır, ardından içeriği depolar arasında paylaşır. –

İlgili konular