Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何通过Web API跟踪断开连接的实体_C#_.net_Asp.net Web Api_Self Tracking Entities_Disconnected - Fatal编程技术网

C# 如何通过Web API跟踪断开连接的实体

C# 如何通过Web API跟踪断开连接的实体,c#,.net,asp.net-web-api,self-tracking-entities,disconnected,C#,.net,Asp.net Web Api,Self Tracking Entities,Disconnected,假设我有一个应用程序,允许客户通过Web API向我的数据库添加/更新产品。我有这样的轻型DTO: public class ProductDTO { public int Id { get; set; } public string Name { get; set; } public decimal Price { get; set; } } 假设我想将更改存储到审计表中,跟踪实体的行业实践是什么。例如,显示旧价格与新价格 在我的WebAPI控制器中收到DTO后,我是

假设我有一个应用程序,允许客户通过Web API向我的数据库添加/更新产品。我有这样的轻型DTO:

public class ProductDTO
{
    public int Id { get; set; }
    public string Name { get; set; }
    public decimal Price { get; set; }
}
假设我想将更改存储到审计表中,跟踪实体的行业实践是什么。例如,显示旧价格与新价格

在我的WebAPI控制器中收到DTO后,我是否必须从数据库中查询当前记录、进行对象比较并保存差异?-这是唯一的方法吗?

Web API有和

这是一个或如果NLog更像你的茶,那么这是一个,这是


如果要比较更改,则需要手动设置。您可以轻松访问JSON请求。这将只是一个问题,或者在新旧对象之间进行区分。堆栈溢出上有一个错误。我将记录请求头、请求正文、端点地址、API密钥、旧对象(请求)和差异。然后,您可以将比较结果作为差异列表输出,或者进行并行比较(如您在Git/SVN/TFS merge中所看到的那样)。

审计表就是一种方法;但是,您可能还想知道“谁更改了此记录”以及审计表可能不支持的各种其他数据。在这种情况下,你应该考虑坚持到一个单独的实体。通过WebAPI来比较我接收的对象的唯一方法是首先从数据库中检索现有的记录来比较吗?基本上,我要说的是创建一个名为Product_Audit的单独实体,它的功能与审计表相同,只是您必须在应用程序中填充内容(SQL不会为您这样做)。这样,您可以添加所有需要的附加信息,例如用于跟踪记录更新者的用户ID。为了进行比较,您只需在ProductDTO.Id等于Product_Audit.ProductId上加入此表
。我不太想查看日志记录,因为我试图跟踪DTO并查看哪些属性发生了更改,这样我就可以将差异保存到审计表中。请参阅我答案的最后一部分。您需要在代码中手动执行此操作。获取新的DTO,加载旧的DTO。比较两者并将差异作为更改列表输出。即字段“X”从“A”更改为“B”。我给你指出的例子很好地做到了这一点。