ASP .NET模型本身

时间:2014-11-24 14:11:30

标签: c# asp.net entity-framework

我可以在其中拥有模型类吗?它似乎有效,但每次我尝试在控制器中检索文档时,SimilarDocuments字段始终是null然后在谷歌搜索后找到了一个工作而不是Document document = db.Documents.Find(id)我使用Document document = db.Documents.Include("SimilarDocuments").FirstOrDefault(x => x.ID == id)但有些东西告诉我它不是解决这个问题的理想方法。为什么简单的.Find(id)不起作用?

以下是我的模型的简化版本:

public class Document
{
    public int ID { get; set; }

    public ICollection<Document> SimilarDocuments { get; set; }

    public Document()
    {
        SimilarDocuments = new List<Document>();
    }
}

2 个答案:

答案 0 :(得分:1)

您期望NavigationProperty延迟加载。如果您未将ICollection<EntityType>标记为virtual

,则不会自动执行此操作

当您更改并将其设置为虚拟(并且未在代码中的其他位置显式停用延迟加载)时,只要您的DBContext被打开,它就会按需加载数据。

public class Document {
  public virtual ICollection<Document> SimilarDocuments { get; set; }
}

在这里,您可以阅读有关延迟加载和预加载主题的更多信息: http://msdn.microsoft.com/en-us/data/jj574232.aspx

答案 1 :(得分:0)

因为从 db.Documents 调用Find方法时,它会搜索每个文档元素。你的serach旨在在每个文档的字段内搜索,这就是你应该使用 Include(“SimilarDocuments”)

的原因
  • 文档
    • 文件 - &gt; 这是db.Documents.Find搜索的地方
      • SimilarDocuments - &gt;你想在这里搜索