我想知道是否有人可以提供一些插入的审计日志记录实施的输入。我需要确保它是事务性的。审计日志记录插入
我在下面的POCO内置的审计DbSet:
public class Audit {
public int Id { get; set; }
public User User { get; set; }
public DateTime Created { get; set; }
public string Type { get; set; }
public int EntityId { get; set; }
public string Message { get; set; }
}
我有一个DbSet,据用户反映,当我做一个插入我想创建自动的审计DbSet添加审计实体。请看下面的代码:
//var user = new User();
//user.Created = DateTime.Now;
//user.Username = "testuser";
//user.Password = "testpassword";
//dataContext.Users.Add(user);
var post = new Post();
post.Created = DateTime.Now;
post.Title = "A sample post";
post.Published = true;
post.Body = "Some content goes in here...";
dataContext.Posts.Add(post);
var audit = new Audit();
audit.Created = DateTime.Now;
audit.User = CurrentUser.User; // Currently logged in user
audit.Type = "Post.Add";
audit.EntityId = post.Id;
audit.Message = "New post was created";
dataContext.Audits.Add(audit);
dataContext.SaveChanges();
在这种情况下,审计的单位将被添加,但“ENTITYID”属性将被设置为0(默认值),而不是创建
用户
后的身份,即身份值(SCOPE_IDENTITY()/ @@ IDENTITY)。
我想保持两个点在一个单一的交易,而不是分裂的项目为两项交易,即坚持在
用户
后,再坚持审计秒为有机会审计可能会失败。
什么获得存储在audit.User在DB?我打赌这是新用户的真实ID。 –
在audit.User中,我将对当前登录用户的引用存储到应用程序(ASP.NET MVC) - 这样我就可以跟踪在系统上执行操作的人员以及日期/时间。 – benno
Ah,gotcha ...正在回答的问题 –