Я создаю простой трекер изменений, чтобы захватить все изменения в базу данных Sql Azure (к сожалению, Sql Azure не поддерживает это изначально, насколько я могу судить) ,Определить, является ли свойство навигационным свойством в EF Core
Я иду список измененных записей, возвращаемых ChangeTracker():
foreach(EntityEntry entry in _context.ChangeTracker.Entries()
.Where(e => e.State == EntityState.Modified))
{
foreach(var prop in entry.Entity
.GetType()
.GetTypeInfo()
.DeclaredProperties)
{
// this line blows up on navigation properties
PropertyEntry propEntry = entry.Property(prop.Name);
if(propEntry.IsModified)
{
var curValue = entry.Property(prop.Name).CurrentValue;
var origValue = entry.Property(prop.Name).OriginalValue;
}
}
}
К сожалению, извлечение информации PropertyEntry для недвижимости взрывает - InvalidOperationException - когда имущество является собственностью навигации, требование собственности не может быть найдено.
Я мог бы просто обернуть код в блок try/catch ... но мне любопытно, есть ли другой способ определить, возможно, из метаданных, что свойство является навигацией или родственным свойством.