更新记录时是否需要分离

本文关键字:分离 是否 新记录 更新 | 更新日期: 2023-09-27 18:36:26

我正在使用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();

分离有必要吗?这是好的做法吗?

更新记录时是否需要分离

这当然是不好的做法,因为现在应用程序中有两个will对象具有相同的键。其中一个是分离的"假人",只会丢失对其所做的任何写入。这很容易出错且令人困惑。

也许你的应用没有像应该使用的那样使用 EF。通常,根本没有太多的附着和分离。EF 对象是表示数据库状态的"活动"对象。它们不是您随意创建并丢弃的 DTO。特别是避免使用通用存储库方法,例如MyRepository.AddOrUpdate获取临时实体。

如果要写入实体,请获取它并写入。不要创建用于更新的新实体。