【问题标题】:MVC 5 one to many virtual ICollection returning null?MVC 5一对多虚拟ICollection返回null?
【发布时间】:2015-11-25 03:05:46
【问题描述】:

我有一个看起来像这样的模型

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.Commentsnull,尽管我在 Comm_ent datatable 中有条目。这在 MVC4 中工作,但升级到 MVC5 后它返回 null 结果。任何想法如何在 MVC5 中做到这一点?

【问题讨论】:

  • 嗯...您确定按原样发布代码吗?获得 null 的唯一方法是,如果您在属性上离开 virtual,或者正在访问不是来自数据库的 MyModel 实例。当 Entity Framework 检索实体时,它实际上返回从实体类派生的代理。在该代理中,它重载了属性(这就是virtual 很重要的原因)以添加延迟加载功能。在属性上调用get(访问它的值),将始终返回对象图或发出查询以检索它,永远不会为空。

标签: c# asp.net-mvc asp.net-web-api asp.net-mvc-5


【解决方案1】:

尝试添加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;

【讨论】:

    【解决方案2】:

    尝试在 MyModel 的构造函数中初始化集合:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-27
      • 1970-01-01
      • 2019-11-26
      • 2019-06-17
      • 1970-01-01
      • 2015-01-27
      • 2016-04-08
      • 2020-02-01
      相关资源
      最近更新 更多