我可以在其中拥有模型类吗?它似乎有效,但每次我尝试在控制器中检索文档时,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>();
}
}
答案 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”)
的原因