【问题标题】:Is detach necessary when updating record?更新记录时是否需要分离?
【发布时间】:2015-01-05 08:38:08
【问题描述】:

我正在与VS2013.NET4.5EF6SQL 2008 合作。

我注意到我们团队的一位开发人员更改了所有更新语句

if (!journey.WillAnswer.Any()) 
{
    db.WillAnswer.Add(willAnswer);
} 
else 
{
    db.WillAnswer.Attach(willAnswer);
    db.Entry(willAnswer).State = EntityState.Modified;
}

db.SaveChanges();

if (!journey.WillAnswer.Any()) 
{
    db.WillAnswer.Add(willAnswer);
} 
else 
{
    var will = db.WillAnswer.Single(x => x.Id == willAnswer.Id);

    db.Detach(will);
    db.WillAnswer.Attach(willAnswer);
    db.Entry(willAnswer).State = EntityState.Modified;
}

db.SaveChanges();

需要分离吗?这是一种好的做法吗?

【问题讨论】:

  • 你有没有问他为什么这么做?

标签: c# entity-framework sql-server-2008-r2 .net-4.5 entity-framework-6


【解决方案1】:

这肯定是不好的做法,因为现在应用程序中有两个 will 对象浮动,它们具有相同的键。其中一个是分离的“假人”,只会丢失对其进行的任何写入。这容易出错且令人困惑。

也许您的应用没有像应该使用的那样使用 EF。通常,根本没有太多的附着和分离。 EF 对象是代表数据库状态的“活动”对象。它们不是您随意创建并丢弃的 DTO。尤其要避免通用 repo 方法,例如 MyRepository.AddOrUpdate 采用临时实体。

如果您想写入实体,请获取并写入。不要创建新实体进行更新。

【讨论】:

  • 我也是这么想的,可能是未知数之一。谢谢。
猜你喜欢
  • 2016-01-09
  • 1970-01-01
  • 1970-01-01
  • 2011-06-29
  • 2014-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多