API для запроса модели вашего контекста Entity Framework?

Сначала я использую код EF, и мне хотелось бы программно определить, какие свойства являются свойствами навигации, какие являются внешними ключами, а какие - идентификаторами. Например, в этом классическом примере Order/Item;

public class Order
{
    public int Id { get; set; }
    public virtual ICollection<OrderItem> Items { get; set;
}

public class OrderItem
{
    public int Id { get; set; }
    public int OrderId { get; set; }
    public Order Order { get; set; }
    public int ProductCount { get; set; }
}

Как программист, мне ясно, что происходит; OrderItem.OrderId мой внешний ключ, OrderItem.Order это свойство навигации, и Order.Items является инверсией этого свойства навигации. Также ясно, что EF знает об этом, потому что он прошел этап создания модели

Тем не менее, я хотел бы быть в состоянии сделать это программно; так что я надеюсь, что есть API, возможно, похожий на Reflection, который может позволить мне задавать такие вопросы, как;

 var model = CreateModelFor(salesContext);
 var foreignKeys = model.ForeignKeysFor(typeof(Order)); // ["OrderId"]
 var navigationProperties = model.NavigationPropertiesFor(typeof(Order)) // [`Order`]

Существует ли такая вещь в EF?

1 ответ

Решение

Вам нужно перейти в ObjectContext, а затем вы можете получить всю информацию о модели, изучив MetadataWorkspace. Этот API и вся модель, стоящая за ним, довольно страшны (с навигационными свойствами, которые являются самыми сложными).

Этот поток содержит пример, который поможет вам начать работу: сущность проверяет, является ли свойство свойством навигации.

Другие вопросы по тегам