1
我試圖使用方法:LINQ to SQL的實體運營
// this is a BreakHistory class from the ADO.NET Data Entity Model _entities
_entities.AddToBreakHistory(this);
_entities.SaveChanges();
和我得到「一個實體對象不能被IEntityChangeTracker的多個實例的引用。」錯誤
我在想,我的更新代碼:
_entities.ApplyPropertyChanges(this.EntityKey.EntitySetName, this);
_entities.SaveChanges();
,我想我可能會得到相同類型的錯誤。
我是否必須獲取原始的BreakHistory對象?
var originalBreakHistory = (from bh in _entities.BreakHistorySet where bh.BreakHistoryID = id select bh).FirstOrDefault();
- 更新於4:40 PM 當天看來,我可能會具有可能與另一個問題。 我將管理器實體對象添加到當前BreakHistory實體,因爲它們是相關的,並且我收到此錯誤: 「兩個對象之間的關係無法定義,因爲它們連接到不同的ObjectContext對象。」
難道那個錯誤是因爲我使用相同的實體模型,但在實體對象上調用「new」並從DB中加載它們?
下面是我的一些代碼:
protected void lstBreaks_ItemCommand(object source, RepeaterCommandEventArgs e)
{
var bh = new BreakHistory().CurrentBreakRequest(int.Parse(e.CommandArgument.ToString())).CurrentManagerIs(GetManagerEntityByUserName());
switch (e.CommandName)
{
case "Approve":
bh.Approve();
break;
case "Deny":
bh.Deny();
break;
case "Push":
bh.Push();
break;
}
bh.Save();
LoadBreakList();
}
上例中的代碼的批准 - bh.Approve()看起來是這樣的:
public BreakHistory Approve()
{
this.DateApproved = DateTime.Now;
this.ManagerApprove = CurrentManager;
return this;
}
經理可以批准,拒絕或推管理員通過ManagerID與BreakHistory關聯的請求。
我還在學習Linq和整個實體模型結構。你說得對,我使用了兩個完全獨立的DataContext。 – kntcnrg 2009-06-29 12:54:07