2011-04-04 55 views
6

我初學者到實體框架,所以請多多包涵......無法定義的兩個對象之間的關係,因爲它們連接到不同的ObjectContext對象MVC 2個

我如何能與兩個對象來自不同的上下文一起?

下面的例子引發以下例外:

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

我已經讀了很多有關此異常的職位,但沒有給我一個工作的答案...

回答

7

你的各種信息庫_userRepository_blogEntryRepository_tagRepository似乎有自己所有的ObjectContext。你應該重構這個和庫之外創建的ObjectContext,然後注入其作爲參數(對於所有存儲庫相同的ObjectContext),像這樣:

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

加成@ Slauma的回答是:你可以不涉及附着物適應不同的環境。唯一的方法是從第一個上下文中分離出一個對象並將其附加到第二個上下文中。僅僅在存儲庫之間共享上下文要複雜得多。 – 2011-04-04 18:40:10

相關問題