2015-11-24 2 views
1

У меня есть модель, которая выглядит как этотMVC 5 от одного до нескольких виртуальных ICollection, возвращающих null?

public class MyModel 
{ 
.... 
public virtual ICollection<Comm_ent> Comments { get; set; } 
} 

и подмодели выглядеть

public class Comm_ent 
{ 
... 
public virtual My_Model MyModel{ get;set;} 
} 

В моей Comm_ent Datatable У меня есть MyModelId ключ, созданный в результате миграции, но когда я

public actionresult MyModelIndex(int? id) 
{ 
var mymodel = _context.MyModels.singleordefault(u => u.Id == id) 
return View(mymodel); 
} 

@Model.Comments is null хотя у меня есть записи в Comm_ent datatable. Он работал в MVC4, но после обновления до MVC5 он возвращает нулевой результат. Любые идеи, как это сделать в MVC5?

+0

Хм ... Вы уверены, что разместили код как есть? Единственный способ, которым вы должны получить null, - это то, что вы либо отказались от 'virtual' в свойстве, либо получили доступ к экземпляру' MyModel', который не поступал из базы данных. Когда Entity Framework извлекает объекты, он фактически возвращает прокси, которые производны от класса сущности. В этом прокси-сервер он перегружает свойство (поэтому важно «виртуальный»), чтобы добавить функциональность для ленивой загрузки. Вызов 'get' в свойстве (доступ к его значению) всегда будет в этом пункте либо возвращать граф объекта, либо выдавать запрос для его получения, но не null. –

ответ

2

Попробуйте добавить Include метод:

public actionresult MyModelIndex(int? id) 
{ 
var mymodel = _context.MyModels.Include(u => u.Comments).singleordefault(u => u.Id == id) 
return View(mymodel); 
} 

Не забудьте добавить следующее заявление: using

using System.Data.Entity; 
1

Попробуйте инициализации коллекции в конструкторе для MyModel:

public MyModel(){ 
    Comments = new HashSet<Comm_ent>(); 
} 
+0

похоже звук но не работает. –

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