2009-01-24 34 views

回答

4

假設我們有BlogPost實體通過Author屬性引用User實體。而不是將User實體指定爲BlogPost.Author屬性(可能需要數據庫往返),請使用正確的EntityKey初始化引用。例如:

BlogPost.AuthorReference.EntityKey = new EntityKey("EFNamespace.User", "Id", userId); 
1

更新分離的實體對象的快捷方式。這是一種擴展方法。

public static void AttachUpdated(this ObjectContext obj, EntityObject objectDetached) 
{ 
    if (objectDetached.EntityState == EntityState.Detached) 
    { 
     object original; 
     if (obj.TryGetObjectByKey(objectDetached.EntityKey, out original)) 
      obj.ApplyPropertyChanges(objectDetached.EntityKey.EntitySetName, objectDetached); 
     else 
      throw new ObjectNotFoundException(); 
    } 
} 
8

一件事紋在我的應用程序使用EF代碼生成SQL後,當我剛剛得知:有之間的差異:

IEnumerable<User> users = DB.User.Where(...); 
int count = users.Count(); 

IQueryable<User> users = DB.User.Where(...); 
int count = users.Count(); 

前生成完整的查詢以從User表中檢索匹配的行,並在數據已傳輸回EF後進行計數。後者執行通常所期望的操作:生成一個效率更高的SQL語句SELECT COUNT ...

這是非常微妙的,但不難想出後,爲什麼注意到它:這是由於C#擴展方法的靜態綁定性質。

一個小的技術來解決這個問題是使用「VAR」關鍵字來聲明變量:

var users = DB.users.Where(...); 
int count = users.Count(); 

這將導致「用戶」被宣佈爲同一類型「凡」回報;這是一個IQueryable <>。

+0

這是一個很好的例子,說明爲什麼我們應該在特定變量類型上使用推薦'var'。 – Rafid 2011-12-29 10:28:03