我正在使用EF 5构建MVC 4应用程序.我需要执行审计跟踪,即记录最终用户所做的任何更改.
我已经问了几次这个问题,但之前没有真正得到满意的答案.所以我希望在某个地方添加更多细节...
目前我有多个存储库
即
public class AuditZoneRepository : IAuditZoneRepository
{
private AISDbContext context = new AISDbContext();
public int Save(AuditZone model, ModelStateDictionary modelState)
{
if (model.Id == 0)
{
context.AuditZones.Add(model);
}
else
{
var recordToUpdate = context.AuditZones.FirstOrDefault(x => x.Id == model.Id);
if (recordToUpdate != null)
{
recordToUpdate.Description = model.Description;
recordToUpdate.Valid = model.Valid;
recordToUpdate.ModifiedDate = DateTime.Now;
}
}
try
{
context.SaveChanges();
return 1;
}
catch (Exception ex)
{
modelState.AddModelError("", "Database error has occured. Please try again later");
return -1;
} …Run Code Online (Sandbox Code Playgroud) 我试图弄清楚如何使用 Code First Entity Framework 并保留某些表的快照历史记录。这意味着对于我想要跟踪的每个表,我希望有一个后缀为 _History 的重复表。每次我对跟踪表行进行更改时,在新数据保存到原始表之前,数据库中的数据都会复制到历史表中,版本列会增加。
所以想象我有一个名为 Record 的表。我有一排(ID:1,名称:一,版本:1)。当我将其更改为 (ID1:Name:Changed,Version:2) 时,Record_History 表将获得一行 (ID:1,Name:One,Version:1)。
我已经看到了很好的例子,并且知道有一些库可以使用实体框架来保存更改的审计日志,但我需要在 SQL 报告的每个修订版中获得实体的完整快照。
在我的 C# 中,我有一个基类,我所有的“跟踪”表等效实体类都继承自:
public abstract class TrackedEntity
{
[Column(TypeName = "varchar")]
[MaxLength(48)]
[Required]
public string ModifiedBy { get; set; }
[Required]
public DateTime Modified { get; set; }
public int Version { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我的实体类之一的示例是:
public sealed class Record : TrackedEntity
{
[Key]
public int RecordID { get; set; }
[MaxLength(64)]
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
现在对于我坚持的部分。我想避免为我创建的每个实体输入和维护一个单独的 …