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. ADO.NET实体框架模型性能
- 6. 我应该如何开始学习ADO.NET实体框架?
- 7. ADO.NET实体框架
- 8. C#/ .Net/WPF开发人员应该知道什么?
- 9. 开发人员应该知道离散数学吗?
- 10. Windows开发人员应该知道命令行吗?
- 11. Ruby和Rails开发人员应该知道什么?
- 12. WinForms开发人员应该如何知道ASP.Net面试?
- 13. 开发人员设计师 - 我应该知道什么?
- 14. PHP/MySQL Web开发人员应该知道哪些服务器?
- 15. 没有实体框架提供发现“MySql.Data.MySqlClient” ADO.NET提供
- 16. 开发人员应该知道什么与托管代码的互操作性
- 17. ADO.NET实体框架夸克
- 18. dlinq与ADO.NET实体框架
- 19. 实体框架与ADO.NET
- 20. 实体框架VS Ado.net
- 21. ADO.net实体框架的API
- 22. 每个抽象类都知道别人
- 23. 我应该使用实体框架,而不是原始的ADO.NET
- 24. 性能的实体框架
- 25. 实体框架性能
- 26. 任何机构知道什么框架msn首页开发人员使用
- 27. Databind ADO.NET实体框架到列表框
- 28. 每个开发人员的私人web.config
- 29. 在作为asp.Net开发人员转到extJs之前应该知道些什么?
- 30. 平均开发人员应该知道裸机需要多少钱?
这是一个很好的例子,说明为什么我们应该在特定变量类型上使用推荐'var'。 – Rafid 2011-12-29 10:28:03