gpt4 book ai didi

c# - .NET MVC 代码优先方法中的历史表?

转载 作者:搜寻专家 更新时间:2023-10-30 20:19:44 25 4
gpt4 key购买 nike

我需要使用代码优先方法跟踪 MVC .NET 应用程序中某些数据库对象的更改历史记录。

历史表的含义如下: http://database-programmer.blogspot.de/2008/07/history-tables.html

如果我自己编写 SQL 查询,我会为其使用历史表。但是在代码优先方法中,SQL 是生成的......我想坚持这种范例。

目标是一个结构,其中包含更改/删除条目的所有“旧”修订版以及一些附加信息(例如时间戳、更改它的用户......)

有什么想法吗?

问候,斯特凡

更具体地说,这里是一些代码示例:

public class Node {
public int NodeID { get; set; }

public string? data { get; set; } // sample data
}


public class NodeHistory {
public int NodeID { get; set; }
public string? data { get; set; }

public int UserID { get; set; }
public DataTime timestamp { get; set; }
}

我需要的是一些“框架”帮助,以便能够在更改被“持久化”以表 Node 结构时向 NodeHistory 添加条目。

这意味着:仅仅覆盖设置方法不是解决方案,因为它还会创建一个条目,如果对“节点”的更改在最后没有持久化(例如 roleback)。

最佳答案

我认为对我来说最好的方法是使用存储库模式,并在您认为适合保留历史的 Node 对象上的每个操作上插入 NodeHistory 表。

编辑:一些代码

public class NodeRepository{
public Node EditNode(Node toEdit, int userId){
using(new TransactionScope())
{
//Edit Node in NodeContext like you would anyway without repository
NodeContext.NodeHistories.Add(new NodeHistory(){//initialise NodeHistory stuff here)
NodeContext.SaveChagnes();
}
}
}
public class NodeContext:DbContext{
public DbSet<Node> Nodes{get;set;}
public DbSet<NodeHistory> NodeHistories{get;set;}
}

如果您正在寻找比这更简单的东西,那么我不知道它可能是什么。

关于c# - .NET MVC 代码优先方法中的历史表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12300429/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com