אנטיטי: change.OriginalValues מחזיר את אותו ערך של change.CurrentValues
-
אני רוצה לעשות לוג שינויים בDB.
הORM הוא EF והשפה היא C#.מצאתי כמה דוגמאות.
כולם בכיוון של זה:
https://exceptionnotfound.net/entity-change-tracking-using-dbcontext-in-entity-framework-6/רק מה, 2 השורות האלו:
var originalValue = change.OriginalValues[prop].ToString(); var currentValue = change.CurrentValues[prop].ToString();מחזירות את אותו ערך, למרות שהערך בוודאות השתנה.
מדובר על EF DB First אבל שהכל נשאר בDB.
מה שנקרא ef db design
ולכן הקוד נמצא בpartial classהנה הקוד המלא (אל תתייחסו לזה שאין הכנסה לDB בסוף, כי עדיין לא יצרתי את הטבלה בDB)
public class ChangeLog { public int Id { get; set; } public string EntityName { get; set; } public string PropertyName { get; set; } public string PrimaryKeyValue { get; set; } public string OldValue { get; set; } public string NewValue { get; set; } public DateTime DateChanged { get; set; } } public partial class Entities : DbContext { public override int SaveChanges() { var modifiedEntities = ChangeTracker.Entries() .Where(p => p.State == EntityState.Modified).ToList(); var now = DateTime.UtcNow; foreach (var change in modifiedEntities) { var entityName = change.Entity.GetType().Name; var primaryKey = GetPrimaryKeyValue(change); foreach (var prop in change.OriginalValues.PropertyNames) { var originalValue = change.OriginalValues[prop].ToString(); var currentValue = change.CurrentValues[prop].ToString(); if (originalValue != currentValue) { ChangeLog log = new ChangeLog() { EntityName = entityName, PrimaryKeyValue = primaryKey.ToString(), PropertyName = prop, OldValue = originalValue, NewValue = currentValue, DateChanged = now }; //ChangeLogs.Add(log); } } } return base.SaveChanges(); } object GetPrimaryKeyValue(DbEntityEntry entry) { var objectStateEntry = ((IObjectContextAdapter)this).ObjectContext.ObjectStateManager.GetObjectStateEntry(entry.Entity); return objectStateEntry.EntityKey.EntityKeyValues[0].Value; } //protected override void OnModelCreating(DbModelBuilder modelBuilder) //{ // //omitted for brevity //} }ולסיום.
בעבר @ארכיטקט הענק (שחבל שלא נמצא כאן כעת
) היא קוד לביצוע של כל הלוג ברמת הDB עצמו. (הקוד נמצא בשיתופייה כאן לדעתי)
אני לא משתממש בזה כי זה לא עוזר לי כאן.
אני רוצה לשמור את המשתמש ושאר ירקות, ואת זה אין לי שם.תודה לעוזרים!
שלום! נראה שהשיחה הזו מעניינת אותך, אבל עדיין אין לך חשבון.
נמאס לכם לגלול בין אותם הפוסטים בכל ביקור? כשנרשמים לחשבון, תמיד תחזרו בדיוק למקום שבו הייתם קודם, ותוכלו לבחור לקבל התראות על תגובות חדשות (בין אם במייל, ובין אם בהתראת פוש). תוכלו גם לשמור סימניות ולפרגן ב-upvote לפוסטים כדי להביע הערכה לחברי קהילה אחרים.
בעזרת התרומה שלך, הפוסט הזה יכול להיות אפילו טוב יותר 💗
הרשמה התחברות