2012-01-17 4 views
0

У меня есть куча свойств, как это на OrderItem:Entity Framework 4.1. Загрузка навигационных свойств с идентификаторами

 public virtual Frame Frame { get; set; } 
     [ForeignKey("Frame")] 
     public int? FrameId { get; set; } 

У меня есть контроллер, как это:

public ActionResult CostOptions(OrderItem oi) 

я устанавливаю Идентификаторы на oi с моделью связывания, как выше, теперь есть способ заставить навигационные свойства автоматически загружаться из идентификаторов? Нужно ли мне вставлять объект для этого?

ответ

1

OrderItem должен быть прокси-сервером, созданным EF для загрузки навигационной собственности, указанной соответствующим идентификатором. Ваша текущая реализация не позволяет этого, поскольку связующее устройство MVC создает экземпляр OrderItem.

public ActionResult CostOptions() 
{ 
    // creates instance of the proxy 
    var oi = db.OrderItems.Create(); 

    if (TryUpdateModel(oi)) 
    { 
      // new entity has to be added before retrieving lazy loaded prop 
      db.OrderItems.Add(oi); 
      // lazy loaded property 
      var frame = oi.Frame; 
    } 
} 
+0

Thankyou, но в моем случае oi еще нет в базе данных. Я бы предпочел не вставлять его на этом этапе, если это возможно. – Tom

+1

@Tom Отредактировал мой ответ. Перед доступом к навигационному свойству необходимо создать экземпляр, используя метод «Создать» и «Добавить» его в «DbSet». – Eranga

+0

Thankyou очень много. Это сработало. Ты мужчина. – Tom

Смежные вопросы