我開始使用EF4並努力瞭解如何正確添加對象。 這是一個多層應用程序,我有一個數據層,它返回我的實體。然後,我在業務層中改變該實體,並通過導航將對象添加到其鏈接的對象。但是,我似乎遇到了一個問題,當我嘗試更新實體時,添加了相關對象。通過導航添加項目並將其存儲在新的上下文中
所以我有這樣的事情:
FirstTypeOfObject:身份證,SomeProperty SecondTypeOfObject:身份證,SomeProperty,FKToFirstTypeOfObject ThirdTypeOfObject:身份證,SomeProperty,FKToSecondTypeOfObject
所以我有一個1到多對多的關係。
現在在我的DAL我檢索FirstTypeOfObject:
using(var context = new ObjectContext())
{
var first = context.FirstTypeOfObjects
.Single(i => i.id = "something")
.Include(o => o.SecondTypeOfObjects.Select(s => s.ThirdKindOfObjects)))
return first;
}
然後我在我的businesslayer添加到該對象:
ThirdKindOfObject t = new ThirdKindOfObject();
t.SomeProperty = "test";
t.Id = Guid.NewGuid();
first.SecondTypeOfObjects.FirstOrDefault().Add(t);
我然後調用一個方法在我的DAL:
public void UpdateObject(FirstTypeOfObject myObject)
{
using(var context = new ObjectContext())
{
context.FirstTypeOfObject.Attach(myObject)
context.ObjectStateManager.ChangeObjectState(myObject, EntityState.Modified);
context.SaveChanges()
}
}
但是,當我更新的項目,我收到一個錯誤:
An object with a temporary EntityKey value cannot be attached to an object context
我不想每次需要創建ThirdTypeOfObject時都去數據庫,因爲它可能是100個對象。另外我想通過實體模型進行修改,我的DAL不知道修改了什麼。我不希望我的DAL知道在業務層中寫入的任何類。
我這樣做,因爲它不是打算?我只是錯過了什麼?
謝謝。這對我有效。使用AutoFac DI,我現在通過HttpRequest創建一個objectContext,這對我很有用。我的DAL現在返回實體。然後通過更高層進行修改,然後通過調用DAL中的方法保存更改,然後調用.SaveChanges() –