2012-09-04 26 views
0
的多個實例引用

我根本就不我想獲得這方面的東西......從控制器的創建行動來看看這個片斷:錯誤:一個實體對象不能被IEntityChangeTracker

if (ModelState.IsValid) 
{ 
    Individual target = db.Individuals.Where(i => i.ID == Target.ID).First(); 

    target.LocationId = Destination.ID; 
    db.Entry(target).State = EntityState.Modified; 
    db.SaveChanges(); 

    if (newPair != null) 
    { 
     db.Pairs.Add(newPair); 
     db.SaveChanges(); 
    } 
} 

第一個SaveChanges();工作得很好,記錄在db中更新。但.Add()線只在第二SaveChanges();導致錯誤An entity object cannot be referenced by multiple instances of IEntityChangeTracker.

newPair之前是Pair類的新實例創建上面幾行,並db是在控制器級別創建了數據庫上下文的實例,如:

public class MoveController : Controller 
{ 
    private ShepherdContext db = new ShepherdContext(); 
...... 

這是怎麼回事?

+0

你的'newPair'引用其他實體嗎? – Eranga

+0

是的!就是這樣!我這樣做:'newPair.Individual1 = Target'當我應該這樣做'newPair.IndividualId = Target.Id'謝謝! – davecove

回答

0

我是新來的MVC &實體框架的工作。打了很多之後我得到了同樣的問題 這個解決方案對我很有用。希望它對你們有用。

var mediaItem = db.MediaItems.FirstOrDefault(x => x.Id == mediaItemViewModel.Id); 
    mediaItem.Name = mediaItemViewModel.Name; 
    mediaItem.Description = mediaItemViewModel.Description; 
    mediaItem.ModifiedDate = DateTime.Now; 
    mediaItem.FileName = mediaItem.FileName; 
    mediaItem.Size = KBToMBConversion(mediaItemViewModel.Size); 
    mediaItem.Type = mediaItem.Type; 

//db.Entry(mediaItem).State = EntityState.Modified;// coment This line 
db.SaveChanges(); 

因爲你是從數據庫讀取整個對象並將其保持在目前情況下,當你嘗試修改實體狀態的告訴你連接到當前環境已經一個實體。只需調用保存更改它將保存它。

相關問題