Как найти поле внешнего ключа для свойства навигации? - PullRequest
2 голосов
/ 13 марта 2020

Для данного объекта я могу получить все его ссылки, вызвав

var references = dbContext.Entry(entity).References;

Теперь я хочу установить для всех ссылок значение null.

foreach (var reference in references)
{
  reference.CurrentValue = null;
}
context.Update(entity);
context.SaveChanges();

Но, очевидно, этого недостаточно для установить ссылку на ноль, нужно также установить свойство внешнего ключа. Но как найти поле внешнего ключа для данной ссылки?

1 Ответ

0 голосов
/ 13 марта 2020

Можно использовать свойство Метаданные , чтобы получить связанное свойство INavigation , затем ForeignKey , чтобы получить связанное IForeignKey , затем Свойства свойство для получения связанных свойств типа IProperty и, наконец, свойство Имя , которое можно передать методу Свойство для получения соответствующего PropertyEntry для управления значением.

Включение всего этого в действие:

var entry = dbContext.Entry(entity);
foreach (var reference in entry.References)
{
    reference.CurrentValue = null;
    foreach (var fkProperty in reference.Metadata.ForeignKey.Properties)
        entry.Property(fkProperty.Name).CurrentValue = null;
}
...