不,你不能用ef来实现这一点(当然,除非你直接使用ado.net)。也就是说,可以通过向实体上下文的分部类添加一些方法来简化检索代码。我就是这样做的:
public partial class MyEntities
{
public T GetById<T>(object id) where T : class
{
EntityKey key = CreateKey<T>(id);
// see http://msdn.microsoft.com/en-us/library/system.data.objects.objectcontext.getobjectbykey.aspx
return (T)GetObjectByKey(key);
}
public static EntityKey CreateKey<T>(object id)
{
var type = typeof(T);
return new EntityKey("MyEntities." + type.Name, "Id", id);
}
}
现在,上面的代码应该是
public void Update(User user)
{
var userToUpdate = db.GetById<UserSet>(user.UserID);
db.ApplyPropertyChanges(userToUpdate.EntityKey.EntitySetName, user);
db.SaveChanges();
}