如何实现泛型Audit.NETjson数据处理?

How to achieve generic Audit.NET json data processing?

我正在使用 Audit.Net 库将 EntityFramework 操作记录到数据库中(目前所有内容都记录到一个 AuditEventLogs table,其中 JsonData 列将数据存储在以下 Json 格式:

{
    "EventType":"MyDbContext:test_database",
    "StartDate":"2021-06-24T12:11:59.4578873Z",
    "EndDate":"2021-06-24T12:11:59.4862278Z",
    "Duration":28,
    "EntityFrameworkEvent":{
        "Database":"test_database",
        "Entries":[
            {
                "Table":"Offices",
                "Name":"Office",
                "Action":"Update",
                "PrimaryKey":{
                    "Id":"40b5egc7-46ca-429b-86cb-3b0781d360c8"
                },
                "Changes":[
                    {
                        "ColumnName":"Address",
                        "OriginalValue":"test_address",
                        "NewValue":"test_address"
                    },
                    {
                        "ColumnName":"Contact",
                        "OriginalValue":"test_contact",
                        "NewValue":"test_contact"
                    },
                    {
                        "ColumnName":"Email",
                        "OriginalValue":"test_email",
                        "NewValue":"test_email2"
                    },
                    {
                        "ColumnName":"Name",
                        "OriginalValue":"test_name",
                        "NewValue":"test_name"
                    },
                    {
                        "ColumnName":"OfficeSector",
                        "OriginalValue":1,
                        "NewValue":1
                    },
                    {
                        "ColumnName":"PhoneNumber",
                        "OriginalValue":"test_phoneNumber",
                        "NewValue":"test_phoneNumber"
                    }
                ],
                "ColumnValues":{
                    "Id":"40b5egc7-46ca-429b-86cb-3b0781d360c8",
                    "Address":"test_address",
                    "Contact":"test_contact",
                    "Email":"test_email2",
                    "Name":"test_name",
                    "OfficeSector":1,
                    "PhoneNumber":"test_phoneNumber"
                },
                "Valid":true
            }
        ],
        "Result":1,
        "Success":true
    }
}

我和我的团队有一个主要方面要实现: 能够创建管理员可以告诉的搜索页面

他们可以给一个时间段,来减少审计记录的数量,有趣的部分来了: 应该有一个输入文本字段,让他们可以在“ColumnValues”部分的值中搜索。

我遇到的问题:

保持通用性很重要,因此我们不需要在每次创建或修改新实体时都修改审核搜索页面。

我只知道 MSSQL,但是将审计日志存储在像 cosmosDB 这样的面向文档的数据库(或其他任何数据库,这只是一个示例)中是否可以解决我的问题?或者我可以使用 MSSQL 等关系数据库达到所需的行为吗?

看来您是在征求意见,在这种情况下,我强烈推荐面向文档的数据库。

CosmosDB 可能是一个不错的选择,因为它支持 SQL 查询。

有一个扩展可以从 Audit.NET 登录到 CosmosDB:Audit.AzureCosmos

示例查询:

SELECT c.EventType, e.Table, e.Action, ch.ColumnName, ch.OriginalValue, ch.NewValue
FROM c 
JOIN e IN c.EntityFrameworkEvent.Entries
JOIN ch IN e.Changes
WHERE ch.ColumnName = "Address" AND ch.OriginalValue = "test_address"

Here 是一个很好的 post,在 CosmosDB

上有很多复杂 SQL 查询的例子