誰かが挿入用の監査ログの実装のためにいくつかの入力を提供できるかどうか疑問に思っていました。私はトランザクションであることを保証する必要があります。監査ログの挿入
は、私は、次の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();
、監査エンティティが追加されるが、「実体識別子」プロパティが0(デフォルト値)に設定される次のコードを検討すなわち、アイデンティティ値(SCOPE_IDENTITY()/ @@ IDENTITY)。
アイテムを2つのトランザクションに分割するのではなく、1つのトランザクションで両方のポイントを保持したいとします。つまり、
ユーザー
を最初に投稿し、次に監査を続行してください。
DBにaudit.Userに保存されたばかりですか?私はそれが新しいユーザーの本当のIDだと賭けています。 –
audit.Userでは、現在ログインしているユーザーへの参照をアプリケーション(ASP.NET MVC)に保存しています。その方法で、システム上のアクションを誰が実行したのか、そして日時を追跡できます。 – benno
Ah、gotcha ... Answer pending –