Фон
У меня есть код в переопределенном методе SaveChanges
, который находит измененные или новые объекты и создает хеш для объекта, но здесь у меня возникают трудности с обнаружением того, что определенный объект изменился.
Код
Мне удалось выявить проблему (хотя это может быть только правильное поведение) до этих строк.
Код в соответствующем методе:
db.SaveChanges(); //for sake of easy example, ensure no other changes need to be saved
Models.File file1 = db.ImportFiles.Find(FileId);
file1.FileData = new FileData();
db.SaveChanges(); //run SaveChanges override which has custom code for hashing content
Основной кусок кода переопределен SaveChanges()
:
public override int SaveChanges(){
var updates = ChangeTracker.Entries().ToList();
var updateHashQueue = new List<DbEntityEntry>();
foreach (DbEntityEntry entry in updates.Where(x => (x.State == EntityState.Added || x.State == EntityState.Modified)))
{
updateHashQueue.Add(entry); //only the FileData object shows here, never the File object
}
base.SaveChanges(); //Later hashing needs IDs to exist
HashObjects(updateHashQueue); //takes relevant objects to create hashes (these objects have a "Hash" field)
return base.SaveChanges();
}
Объяснение
После изменения модели типа File
, когда она содержит экземпляр FileData
, Entity Framework ChangeTracker.Entries()
содержит как объект FileData
, так и объект File
, но только первая находится в EntityState.Modified
состояние, пока объект File
отображается как EntityState.Unchanged
.
Я думаю, что ответом на этот вопрос может быть просто то, что именно так оно и должно работать, но мне интересно, есть ли способ подобрать эти модели, как, например, File
в этом примере, изменились таким образом.
Есть идеи?