只是想了解使用linq2sql更新实体的最佳实践是什么?
更多细节可以更好地解决问题。
正如我从文章中所理解的那样,我可以有两种情况:实体附加到上下文和从头开始构建的实体(或来自现有实体)。 我想只有一种方法来更新entites,现在以下列方式实现:
public virtual void Save<T>(T value) where T : class
{
Context.GetTable<T>().Attach(value);
Context.Refresh(RefreshMode.KeepCurrentValues, value);
Context.SubmitChanges();
}
当然,当我执行代码时:
var orders = GenericRepository.Instance.Find<BuyerOrder>(b => b.ID == 2).FirstOrDefault();
orders.Price = 397809;
GenericRepository.Instance.Save(orders);
该对象已经附加到上下文中,我得到一个例外:
Cannot attach an entity that already exists.
我应该在保存前始终分离物体吗? 还有另一种方法可以解决这个问题吗?
对不起,如果问题是愚蠢的 - 这是我第一次使用linq2sql
在Save
方法中,不要附加表格。 它也不需要一个类型,你可以在Save方法中调用Context.SubmitChanges
。 就像是:
public void Save()
{
Context.SubmitChanges();
}
然后做:
var orders = GenericRepository.Instance.Find<BuyerOrder>(b => b.ID == 2).FirstOrDefault();
orders.Price = 397809;
GenericRepository.Instance.Save();
有关更多示例,请参阅MSDN: http : //msdn.microsoft.com/en-us/library/bb386931.aspx
您可以检查实体是否附加如下:
if (!Context.GetTable<T>().IsAttached(value))
{
Context.GetTable<T>().Attach(value);
}
Context.Refresh(RefreshMode.KeepCurrentValues, value);
Context.SubmitChanges();