Ленивая загрузка не работает в вашем случае, потому что product
, который передается в действие контроллера, не является прокси-объектом, но создается как обычный экземпляр Product
связывателем модели.
То, что вы ожидаете, будет работать, если product
будет создан как прокси:
var product = db.Products.Create();
product.CategoryId = 1;
db.Products.Add(product);
db.SaveChanges();
string someString = product.Category.SomeProperty;
// Category gets lazily loaded now
Свойство Category
в классе Product
должно быть virtual
, конечно, чтобы ленивая загрузка работала вообще.
Это не поможет вам в вашей ситуации, потому что связыватель модели не создает прокси.
Решения: либо явная загрузка (см. Ответ @ Eranga), либо, если вам действительно нужно толькочтобы проверить SomeProperty
категории, выберите значение в проекции:
string someString = db.Entry(product).Reference(p => p.Category).Query()
.Select(c => c.SomeProperty).SingleOrDefault();
... или (поскольку у вас есть ключ категории) ...
string someString = db.Categories.Where(c => c.Id == product.CategoryId)
.Select(c => c.SomeProperty).SingleOrDefault();