ASP.Net MVC 3,复杂对象和延迟加载

Jea*_*amp 2 lazy-loading entity-framework-4.1 asp.net-mvc-3

首先,我是ASP.Net MVC 3的新手,我也使用EF 4.1.

我有一个复杂的对象,类似于让我们说一个包含Category对象的Product对象.所以我们有Product.CategoryId,Product.Category和一些额外的属性.我还有一个表单来创建带有下拉列表的产品来选择类别.

在我的控制器中,在创建产品之后,我需要访问类别的某些属性来执行一些额外的操作.但是,虽然设置了Product.CategoryId,但我无法访问Product.Category.SomeProperty,因为Product.Category为null.我希望使用一些延迟加载自动加载Product.Category,但它似乎不是.

我的控制器中的代码如下所示:

[HttpPost]
public ActionResult Create(Product product)
{
   if (ModelState.IsValid)
    {
        db.Products.Add(product);
        db.SaveChanges();

        string someString = product.Category.SomeProperty;
        ...
Run Code Online (Sandbox Code Playgroud)

现在,这不起作用,因为product.Category为null.我需要添加什么才能访问SomeProperty?

Era*_*nga 7

延迟加载在此方案中不起作用,因为您要添加新对象.延迟加载将对EF上下文创建的"代理"实体起作用.

所以你可以在这里明确加载导航属性.

    db.Products.Add(product);
    db.SaveChanges();

    db.Entry(product).Reference(p => p.Category).Load();

    string someString = product.Category.SomeProperty;
Run Code Online (Sandbox Code Playgroud)