I m ghi đè phương thức SaveChange(). Những gì tôi muốn là để ghi lại tất cả các thay đổi được thực hiện cho một thực thể vào cơ sở dữ liệu trong văn bản đơn giản như "abc updated Name john toee, ..." vn Tôi đã đạt được chức năng nhưng khi có khóa ngoài trong thực thể cập nhật như country_Id mà chỉ ra bảng Quốc gia nó tạo ra văn bản như "abc cập nhật Country_Id 1 đến 3, ..." thats những gì tôi không muốn nó nên được như thế này "abc cập nhật quốc gia Canada đến Úc, ..."Kiểm tra C# ghi đè phương thức SaveChanges(). Cách tìm khóa ngoài của một thực thể và giá trị của nó từ bảng
Vì vậy, để đạt được điều này cần biết các phím nước ngoài và giá trị của nó
Mã của tôi là:
public override int SaveChanges()
{
List<string> listChanges = new List<string>();
List<string> listTable = new List<string>();
var objectStateManager = ((IObjectContextAdapter)this).ObjectContext.ObjectStateManager;
IEnumerable<ObjectStateEntry> changes =
objectStateManager.GetObjectStateEntries(EntityState.Modified | EntityState.Added | EntityState.Deleted);
foreach (ObjectStateEntry stateEntryEntity in changes)
{
var modifiedProperties = stateEntryEntity.GetModifiedProperties();
foreach (var propName in modifiedProperties)
{
if (Convert.ToString(stateEntryEntity.OriginalValues[propName]) != Convert.ToString(stateEntryEntity.CurrentValues[propName]))
{
listTable.Add(stateEntryEntity.EntityKey.EntitySetName);
listChanges.Add(propName + " From " + Convert.ToString(stateEntryEntity.OriginalValues[propName]) + " to " + Convert.ToString(stateEntryEntity.CurrentValues[propName]));
}
//System.Console.WriteLine("Property {0} changed from {1} to {2}",
// propName,
// stateEntryEntity.OriginalValues[propName],
// stateEntryEntity.CurrentValues[propName]);
}
}
return base.SaveChanges();
}
Có một dự án ở đây cho phép bạn thực hiện kiểm toán thay đổi do khuôn khổ tổ chức , giá trị mới và cũ vv Tôi tự hỏi nếu bất kỳ mã trong đó có thể giúp bạn đạt được điều này. https://github.com/bilal-fazlani/tracker-enabled-dbcontext Vấn đề bạn gặp phải là các mối quan hệ thường như thế này, một khóa ngoại, xác định một Id của toàn bộ hàng, vì vậy bạn không thể hiển thị ' Canada đến Úc 'mà không chỉ định tên cột cụ thể ... trừ khi bạn áp dụng một số loại quy ước. – Luke