相关疑难解决方法(0)

如何使用Entity framework 5和MVC 4创建审计跟踪

我正在使用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)

.net c# asp.net-mvc-4 entity-framework-5

19
推荐指数
3
解决办法
3万
查看次数

实体框架快照历史

我试图弄清楚如何使用 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)

现在对于我坚持的部分。我想避免为我创建的每个实体输入和维护一个单独的 …

c# entity-framework ef-code-first

4
推荐指数
1
解决办法
2959
查看次数