Мне было интересно, может ли кто-нибудь предложить какой-нибудь вклад для реализации ведения журнала аудита для вставок.Мне нужно убедиться, что это транзакция.
У меня есть аудит DbSet, построенный на следующем POCO:
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, скажем Users, что когда я делаю вставку, яхотите создать автоматически добавляемую сущность Audit в Audit 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 (значение по умолчанию), а не идентификатор созданного user post, то есть значение идентификатора (SCOPE_IDENTITY () / @@ IDENTITY).
Я бы хотел сохранить обе точки в одной транзакции, а не разбивать элементы на две транзакции, т.е. сохранять Пользователь Сначала опубликуйте, а затем сохраните Аудит во втором, так как есть вероятность, что Аудит может завершиться неудачей.