Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在EF core中包含虚拟ICollection以及此集合中的特定项?_C#_Entity Framework_Entity Framework Core_Automapper_Lazy Loading - Fatal编程技术网

C# 如何在EF core中包含虚拟ICollection以及此集合中的特定项?

C# 如何在EF core中包含虚拟ICollection以及此集合中的特定项?,c#,entity-framework,entity-framework-core,automapper,lazy-loading,C#,Entity Framework,Entity Framework Core,Automapper,Lazy Loading,我试图加载实体的所有属性,但其中两个是虚拟的。所以我必须在查询中包含它们。问题在于,第二个虚拟财产是第一个虚拟财产的单个项目 例如:假设我有一本实体杂志,上面有所有的期刊和最新的期刊(从这个月开始)。我想把所有东西都装进去 公共类杂志 { 公共int Id{get;set;} 公共字符串名称{get;set;} ... 公共虚拟ICollection问题{get;set;} 公共虚拟问题CurrentIssueOn { 得到 { 如果(问题!=null) { var date=DateTime.

我试图加载实体的所有属性,但其中两个是虚拟的。所以我必须在查询中包含它们。问题在于,第二个虚拟财产是第一个虚拟财产的单个项目

例如:假设我有一本实体杂志,上面有所有的期刊和最新的期刊(从这个月开始)。我想把所有东西都装进去

公共类杂志
{
公共int Id{get;set;}
公共字符串名称{get;set;}
...
公共虚拟ICollection问题{get;set;}
公共虚拟问题CurrentIssueOn
{
得到
{
如果(问题!=null)
{
var date=DateTime.Now;
if(date.AddDays(DaysSendBack)>DateTime.Now.date)
{
日期=date.AddDays(DaysSendBack);
}
退货问题
其中(i=>(i.IssueDate.HasValue&&i.IssueDate.Value>=日期))
.OrderBy(i=>i.IssueDate)
.FirstOrDefault();
}
返回null;
}
}
我试过这样做:

publicIQueryable GetList(字符串userAuthToken)
{
返回mapper.ProjectTo(dbContext
.杂志
.包括(m=>m.Issues)
.包括(m=>m.CurrentIssueOn)
.AsNoTracking()
.AsQueryable());
}
但是CurrentIssueOn始终为null,因为在查询执行期间,Issues集合仍然为null


我认为,如果我从问题集合中删除虚拟关键字,那么在这种情况下它将起作用。但我还有另一个查询,我不想包含问题,因此这不是一个好的解决方案。

我不确定这里发生了什么,但您的实体可能应该是这样的:

public virtual ICollection<Issue> Issues { get } = new HashSet<Issue>();
[NotMapped]
public virtual Issue CurrentIssueOn
{
公共虚拟ICollection问题{get}=new HashSet();
[未映射]
公共虚拟问题CurrentIssueOn
{

没有理由以导航属性集合为空开始。只需将它们初始化为空集合。

“CurrentIssueOn始终为空,因为在查询执行期间,问题集合仍然为空”-这不是原因。CurrentIssueOn不是来自数据库,是否不需要包含()它。在您的CurrentIssueOn getter中放置一个断点,并查看是您的映射程序调用它。getter中的数据或逻辑可能有问题。您是对的。Automapper调用CurrentIssueOn getter。但如果我在其中放置断点,则Issues集合为null,尽管“.Include(m=>m.Issues)”在我的询问中。谢谢你的帮助!