如何在不指定每个成员的情况下更新整个实体?

时间:2015-10-30 10:32:27

标签: c# linq linq-to-sql

我的.net网络服务从数据库中读取实体并将其发送到客户端应用程序。

客户端应用程序修改实体中的某些字段,然后将实体提交回服务器以在DB中更新。

执行此操作的万无一失但费力的方法如下:

public void Update(MyEntity updatedEntity)
{
    using (var context = new MyDataContext())
    {
        var existingEntity = context .MyEntities.Single(e => e.Id == updatedEntity.Id);
        existingEntity.FirstName = updatedEntity.Name;
        existingEntity.MiddleName = updatedEntity.MiddleName;
        existingEntity.LastName = updatedEntity.LastName;
        // Rinse, repeat for all members of MyEntity...
        context.SubmitChanges();
    }
}

我不想走这条路,因为它迫使我在MyEntity中指定每个成员属性。如果MyEntity的结构发生变化,这可能会中断。

如何接收传入的updatedEntity并将其引入LINQ to SQL整体进行更新?

我尝试使用DataContext的{​​{1}}方法实现这一目标,并进入痛苦的世界。

Attach()是正确的方法吗?有人能指出一个如何做到这一点的工作实例吗?

1 个答案:

答案 0 :(得分:1)

Attach确实是一种方法。

那说......

  

执行此操作的万无一失但费力的方法类似于

如果你问我,这是正确的方式。

  

如果MyEntity的结构发生变化,这可能会中断

我个人希望在数据库架构发生变化时修改我的Update业务方法:

  • 如果内部更改无法更改业务,则没有理由修改调用业务方法的代码。让您的业务方法负责内部事务
  • 如果需要您修改消费者的某些更改,那么就这样,则无论如何都需要更新调用代码(至少要填充新属性)你添加到实体)

基本上,我对此主题的看法是您不应该尝试将实体传递到业务层。我解释了why I think that in a previous answer