Asp.net mvc 使用存储库模式,更新记录的最有效方法是什么?
我正在用ADO.NET实体框架实现存储库模式。我发现更新记录相对来说比从数据库中添加或删除记录要复杂得多。请参见下面的更新声明和添加声明以供判断 我想知道是否有任何方法可以更新记录而不必首先检索原始记录Asp.net mvc 使用存储库模式,更新记录的最有效方法是什么?,asp.net-mvc,repository-pattern,Asp.net Mvc,Repository Pattern,我正在用ADO.NET实体框架实现存储库模式。我发现更新记录相对来说比从数据库中添加或删除记录要复杂得多。请参见下面的更新声明和添加声明以供判断 我想知道是否有任何方法可以更新记录而不必首先检索原始记录 public void Update(User user) { var userToUpdate = (from u in db.UserSet where u.UserID == user.UserID
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();
}
不,您不能使用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);
}
}
公共部分类MyEntities
{
公共T GetById(对象id),其中T:class
{
EntityKey=CreateKey(id);
//看http://msdn.microsoft.com/en-us/library/system.data.objects.objectcontext.getobjectbykey.aspx
return(T)GetObjectByKey(key);
}
公共静态EntityKey CreateKey(对象id)
{
var类型=类型(T);
返回新的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();
}
公共作废更新(用户)
{
var userToUpdate=db.GetById(user.UserID);
db.ApplyPropertyChanges(userToUpdate.EntityKey.EntitySetName,用户);
db.SaveChanges();
}
你说得对,我不知道我在想什么。我应该使用getObject方法,而不是重新键入相同的查询,谢谢。我还没有实现通用的get,但我会在完成一些其他功能后立即实现。再次感谢。