更新记录时是否需要分离?

时间:2015-01-05 08:38:08

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

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

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

1 个答案:

答案 0 :(得分:1)

这当然是不好的做法,因为现在应用程序中有两个will个对象,它们具有相同的密钥。其中一个是独立的“虚拟”,只会失去对它的任何写入。这容易出错并且令人困惑。

也许你的应用程序没有使用EF,因为它应该被使用。通常,根本没有很多附着和拆卸。 EF对象意味着表示数据库状态的“实时”对象。它们不是您随意创建并丢弃的DTO。特别是避免使用MyRepository.AddOrUpdate等临时实体的通用仓库方法。

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