写一个插入或更新并审核实体更改?我该怎么做?

时间:2010-12-02 13:00:16

标签: entity-framework entity-framework-4

插入/更新实体时,我需要记录所有已更改的属性。 让我们拿2个表客户和地址。客户可以拥有多个地址。

任务:

将所有已更改的属性写入审计表?

如果您喜欢这样做,那么编写更新方法的方法是什么。

我看到你可以使用以下内容:

  ObjectStateEntry entry = ObjectStateManager.GetObjectStateEntry(entity);
  var changes=  entry.GetModifiedProperties().

虽然以下是半尝试,但不确定您是如何实际编写该方法的: 你能给我一些指示或帮我解释一下代码吗?

  private  bool UpdateCustomer(Customer modifiedCustomerDto)
  {
     using (var ctx = new MyContext())
     {
        var oldCustomer = ctx.Customers.Where(xx => xx.CustomerId == modifiedCustomerDto.id).Single();
        oldCustomer.Name = modifiedCustomerDto.Name;
        oldCustomer.Surname = modifiedCustomerDto.Surname;

        foreach (var oldAddress in oldCustomer.Addresses)
        {
          //if it's a new Address add it 
           //else updateit
           //Write to the audit table all the properties that have changed.
        }

        //Get Modified properties and write to the auditlog

        ctx.SaveChanges();
     }
  }

1 个答案:

答案 0 :(得分:1)

查看处理this postSavingChanges event 您可以在此事件中检查要更新的对象的所有属性,并使用自定义代码进行记录。