我有以下代碼在保存.Net 4/EF 4項目中的分離對象方面做得非常好。我想在新的.Net 4.5/EF 5項目中使用該代碼。我複製它,現在它給了我一個編譯錯誤:TryGetObjectByKey不在.net 4.5中編譯
「MyEntities不包含'TryGetObjectByKey'的定義,並且沒有擴展方法'TryGetObjectByKey'接受類型MyEntities的第一個參數可以找到(你是否缺少)使用指令或程序集引用?)「
據稱它來自System.Data.Entity程序集(.dll)中引用的System.Data.Objects命名空間(所以我有一個使用它)。
public bool UpdateChanged(IEntityWithKey DetachedObject = null) {
bool Result = false;
try {
using (MyEntities db = new MyEntities()) {
if (DetachedObject != null) {
object Original = null;
if (db.TryGetObjectByKey(DetachedObject.EntityKey, out Original))
db.ApplyCurrentValues(DetachedObject.EntityKey.EntitySetName, DetachedObject);
} // if they want to Update an Entity
db.SaveChanges();
Result = true;
} // using the database
} catch (Exception e) {
} // try-catch
return Result;
} // UpdateChanged - Method
根據這個鏈接它應該工作:http://msdn.microsoft.com/en-us/library/bb738728.aspx
能否請你幫忙嗎?
UPDATE /解決方案:
基於@羅雲的回答下面我只是修改了我的保存方法類似下面,而不是創建一個UpdateChanged方法,它有獨立的對象:
using (MyEntities db = new MyEntities()) {
if (o.ID > 0) {
// Existing Owner
db.Owners.Attach(o);
db.Entry(o).State = EntityState.Modified;
db.Entry(o.Address).State = EntityState.Modified;
} else {
// New Owner
db.Owners.Add(o);
} // if this is a New Owner
db.SaveChanges();
} // using the database
MyEntities是ObjectContext的一個子類嗎? –
'MyEntities'('db'的類型)被看作是第一個參數,所以這看起來像是你在某處的擴展方法。 –
爲了讓Brian的問題更清楚 - 是從ObjectContext或DbContext派生的MyEntities?你能展示它的外觀嗎? – Pawel