在Linq2SQL中更新实体的最佳做法是什么?

问题描述 投票:0回答:2

只是想了解使用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

c# asp.net-mvc asp.net-mvc-3 linq linq-to-sql
2个回答
1
投票

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


1
投票

您可以检查实体是否附加如下:

if (!Context.GetTable<T>().IsAttached(value))
{
    Context.GetTable<T>().Attach(value);
}
Context.Refresh(RefreshMode.KeepCurrentValues, value);
Context.SubmitChanges();
© www.soinside.com 2019 - 2024. All rights reserved.