我用ADO.NET实体框架实现Repository Pattern。我发现更新记录比仅添加或删除数据库要复杂得多。请参阅下面的Update语句并添加语句以供您判断。
我想知道是否有任何方法可以更新记录而无需先检索原始记录。
public void Update(User user)
{
var userToUpdate = (from u in db.UserSet
where u.UserID == user.UserID
select u).FirstOrDefault(); //original record
db.ApplyPropertyChanges(userToUpdate.EntityKey.EntitySetName,
user);
db.SaveChanges();
}
为同一个仓库添加声明:
public void Add(User user)
{
user.MemberFrom = DateTime.Now;
_repository.AddToUserSet(user);
_repository.SaveChanges();
}
答案 0 :(得分:1)
不,你不能用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();
}