10
A
回答
9
使用ObjectContext#GetObjectByKey()
通過其關鍵字檢索實體,而不是在LINQ查詢中使用First()
(或FirstOrDefault
)運算符。後者將每次擊中數據庫,而前者將首先搜索實體的EF緩存(具體爲ObjectStateManager
),如果找到具有指定密鑰的實體,將不會擊中數據庫。
參考
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 <>。
相關問題
- 1. asp.net框架和庫每個開發人員都應該知道...並使用
- 2. 每個開發人員都應該知道的PowerShell腳本
- 3. 每個.NET開發人員應該知道哪些類/接口?
- 4. 性能分析ADO.NET和實體框架
- 5. 實體框架性能VS傳統ADO.Net
- 6. ADO.NET實體框架模型性能
- 7. 我應該如何開始學習ADO.NET實體框架?
- 8. ADO.NET實體框架
- 9. Ruby和Rails開發人員應該知道什麼?
- 10. C#/ .Net/WPF開發人員應該知道什麼?
- 11. 開發人員應該知道離散數學嗎?
- 12. 開發人員設計師 - 我應該知道什麼?
- 13. PHP/MySQL Web開發人員應該知道哪些服務器?
- 14. WinForms開發人員應該如何知道ASP.Net面試?
- 15. Windows開發人員應該知道命令行嗎?
- 16. 實體框架ADO.NET Sql.Data.Client提供商
- 17. 沒有實體框架提供發現「MySql.Data.MySqlClient」 ADO.NET提供
- 18. 開發人員應該知道什麼與託管代碼的互操作性
- 19. 實體框架VS Ado.net
- 20. dlinq與ADO.NET實體框架
- 21. 實體框架與ADO.NET
- 22. ADO.net實體框架的API
- 23. ADO.Net實體框架事務
- 24. ADO.NET實體框架夸克
- 25. 每個抽象類都知道別人
- 26. 我應該使用實體框架,而不是原始的ADO.NET
- 27. 每個C++開發人員應該瞭解的有關鏈接的知識
- 28. ADO.NET實體框架 - 甲骨文與實體框架6
- 29. 性能的實體框架
- 30. 實體框架性能
這是一個很好的例子,說明爲什麼我們應該在特定變量類型上使用推薦'var'。 – Rafid 2011-12-29 10:28:03