2009-01-24 50 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