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 и вся модель, стоящая за ним, довольно страшны (с навигационными свойствами, которые являются самыми сложными).
Этот поток содержит пример, который поможет вам начать работу: сущность проверяет, является ли свойство свойством навигации.