Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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# “急装”;类型之间未定义强制运算符“;.NET Core/EF Core 2.0升级后_C#_Linq_.net Core_Entity Framework Core_Eager Loading - Fatal编程技术网

C# “急装”;类型之间未定义强制运算符“;.NET Core/EF Core 2.0升级后

C# “急装”;类型之间未定义强制运算符“;.NET Core/EF Core 2.0升级后,c#,linq,.net-core,entity-framework-core,eager-loading,C#,Linq,.net Core,Entity Framework Core,Eager Loading,在.NET Core 1.x中,我们有一个类似以下的方法: 公共异步任务GetOneAsync(DbSet paperPointerRecords, int?paperId=null, long?externalPaperId=null, 表达式筛选器=空) { var query=filter为null?paperPointerRecords.AsQueryable():paperPointerRecords.Where(filter); if(paperId.HasValue) query=

在.NET Core 1.x中,我们有一个类似以下的方法:

公共异步任务GetOneAsync(DbSet paperPointerRecords, int?paperId=null, long?externalPaperId=null, 表达式筛选器=空) { var query=filter为null?paperPointerRecords.AsQueryable():paperPointerRecords.Where(filter); if(paperId.HasValue) query=query.Where(\u=>\ u0.PaperPointerId==paperId); if(externalPaperId.HasValue) query=query.Where(\u=>\ u0.ExternalId==externalPaperId); var record=wait query.Include(\u=>\ ux.Paper) .然后包括(=>u.PaperColors) .选择(=>new { PaperRecord=\纸张, PaperPointerRecord=_ }) .SingleOrDefaultAsync(); return!(记录为空)?(record.PaperRecord,record.PaperPointerRecord):抛出NewPaperRecordNotFoundException(paperId,externalPaperId); } 这对我们很有效。将整个项目升级到everything.NET Core 2.0和EF Core 2.0后,该方法会引发以下异常:

System.InvalidOperationException发生:在类型“PaperPointerRecord”和“PaperRecord”之间未定义强制运算符

此块中出现此异常:

var-record=wait-query.Include(\u=>\ ux.Paper)
.然后包括(=>u.PaperColors)
.选择(=>new
{
PaperRecord=\纸张,
PaperPointerRecord=_
})
.SingleOrDefaultAsync();
如果我删除了渴望加载并使其如此,那么错误就会消失,但我也不会得到预期的结果:

var记录=等待查询。选择(=>new
{
PaperRecord=\纸张,
PaperPointerRecord=_
})
.SingleOrDefaultAsync();

我已经为此检查了,没有看到任何显示的内容表明我们在快速加载时出错。

Include
在这种情况下没有用处,因为您返回了一个投影,并且忽略了
Include
(阅读关于忽略的Include)

如果“预期结果”是指希望
record.PaperRecord.Paper
有一个值,只需将其包含在投影中即可;EF将建立起这种关系

new
{
    PaperRecord = _.Paper,
    PaperPointerRecord = _,
    PaperColor = _.Paper.PaperColor,
}

我完全同意你的评估。我基本上按照你的建议做了,解决了这个问题。最后,代码被简化并更直接。不过,更让我担心的是,它在1.x和2.0中运行得很好,它对它提出了质疑。在某些方面,它有助于使事情变得更好。但是这种情况有点强迫,需要我们重新编写大量代码。