2012-05-18 34 views
0

當試圖向站點添加「實體」時出現此錯誤。一個實體對象不能被IEntityChangeTracker的多個實例引用

網站與「實體」之間的關係是一對多「的實體對象不能被IEntityChangeTracker的多個實例的引用」。

我的模型看起來如下:

網站:

public class Site : Model 
{ 
// The collection of Entities belonging to this site 
public virtual ICollection<Entity> Entities { get; set; } 
} 

實體:

[HttpPost] 
public ActionResult Add(EntityModel _entityModel) 
{ 
    var model = _entityModel.ToEntity(); 
    if (ModelState.IsValid) 
    { 
    model.Site = _siteRepository.Find(1); 
    model.Label = model.Name.Replace(' ','_').ToLower(); 
    _entityRepository.Add(model); 
    } 

    return RedirectToAction("Index"); 
} 

守則EFEntityRepository.cs:

public class Entity : Model 
{ 
public string Label { get; set; } 
public string Name { get; set; } 
public virtual Site Site { get; set; } 
} 

我的控制器代碼:

public void Add(Entity entity) 
{ 
    DateTime dateModified = DateTime.Now; 
    entity.CreatedOn = dateModified; 
    entity.LastUpdatedOn = dateModified; 
    this._context.Entities.Add(entity); 
    this._context.SaveChanges(); 
} 

請建議解決方案。

+0

你在'_siteRepository'和'_entityRepository'中使用了兩個不同的'_context'實例嗎?這將是例外的原因。 – Slauma

+0

'_entityModel.ToEntity()'做了什麼? –

+0

嗨,你可以在路徑中找到完整的源代碼文檔https://docs.google.com/document/d/1lYThMsXGnd2UoG-BdBiwRYDyo2Db3reF3osSDfOipO0/edit –

回答

0

這聽起來像你有多個Context類持有對這個對象的引用,可能通過鍵。 確保您的上下文在每個請求之後被處理,另外,沒有其他操作會導致另一個上下文實例持有該實體。

+0

我是實體框架的新手,在上面的「EFEntityRepository.cs」裏我必須調用dispose方法。請幫助 –

+0

需要更多的代碼...我沒有看到你創建你的上下文或版本庫 –

+0

嗨,亞當,謝謝你的回覆。您可以在位置https://docs.google.com/document/d/1lYThMsXGnd2UoG-BdBiwRYDyo2Db3reF3osSDfOipO0/edit?pli=1 –

相關問題