更新记录时是否需要分离
本文关键字:分离 是否 新记录 更新 | 更新日期: 2023-09-27 18:36:26
我正在使用VS2013
,.NET4.5
,EF6
和SQL 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();
分离有必要吗?这是好的做法吗?
这当然是不好的做法,因为现在应用程序中有两个will
对象具有相同的键。其中一个是分离的"假人",只会丢失对其所做的任何写入。这很容易出错且令人困惑。
也许你的应用没有像应该使用的那样使用 EF。通常,根本没有太多的附着和分离。EF 对象是表示数据库状态的"活动"对象。它们不是您随意创建并丢弃的 DTO。特别是避免使用通用存储库方法,例如MyRepository.AddOrUpdate
获取临时实体。
如果要写入实体,请获取它并写入。不要创建用于更新的新实体。