Entity framework core LINQ查询在FirstOrDefault方法上引发异常

Entity framework core LINQ查询在FirstOrDefault方法上引发异常,entity-framework-core,linq-to-entities,Entity Framework Core,Linq To Entities,我使用的是EF core,两个实体之间存在多对多关系 IotaProject用户 以下是与问题相关的实体和dto public class IotaProject { [Key] public int Id { get; set; } [Required] public string ProjectName { get; set; } [Required] public DateTime Create { get; set; } publ

我使用的是EF core,两个实体之间存在多对多关系

IotaProject用户

以下是与问题相关的实体和dto

public class IotaProject
{
    [Key]
    public int Id { get; set; }
    [Required]
    public string ProjectName { get; set; }
    [Required]
    public DateTime Create { get; set; }

    public ICollection<ProjectOwnerJoint> Owners { get; set; } = new List<ProjectOwnerJoint>();

}

public class ProjectOwnerJoint
{
    public int IotaProjectId { get; set; }
    public IotaProject IotaProject { get; set; }

    public int UserId { get; set; }
    public User User { get; set; }

}

public class User
{
    [Key]
    public int Id { get; set; }
    [Required]
    public string FullName { get; set; }
    [Required]
    public string ShortName { get; set; }
    [Required]
    public string Email { get; set; }

    public ICollection<ProjectOwnerJoint> OwnedProjects { get; set; } = new List<ProjectOwnerJoint>();
}

public class ApplicationDbContext : DbContext
{
    public DbSet<IotaProject> IotaProjects { get; set; }
    public DbSet<User> Users { get; set; }
    public DbSet<ProjectOwnerJoint> ProjectOwnerJoint { get; set; }
}

public class IotaProjectDisplayDto
{
    public int Id { get; set; }
    public string ProjectName { get; set; }
    public DateTime Create { get; set; }

    public UserMinDto Owner { get; set; }
    public int Count { get; set; }

    public IEnumerable<UserMinDto> Reviewers { get; set; }
}

public class UserMinDto
{
    public int Id { get; set; }
    public string FullName { get; set; }
    public string ShortName { get; set; }
}
我猜这可能与延迟执行有关,但在读了一些帖子后,我仍然无法解决它

任何提示都将不胜感激


现在,我完成这项工作的唯一方法是将IoTapProject DisplaydTo中的Owner属性类型更改为IEnumerable,它将不再需要FirstOrDefault()立即执行。然后,我手动获取客户端中要显示的第一个元素

此问题发生在Microsoft.EntityFrameworkCore.SqlServer 3.0.0-preview7.19362.6中


正如Ivan在评论中建议的那样,我最终降级到EF core stable 2.2.6,一切正常。

此问题发生在Microsoft.EntityFrameworkCore.SqlServer 3.0.0-preview7.19362.6中


正如Ivan在评论中建议的那样,我最终降级到EF core stable 2.2.6,一切正常。

LINQ查询示例与异常之间存在差异。异常消息引用了
FirstUserMinDto
方法的
List
参数,我在查询中没有看到该参数。请提供复制问题的真实示例。抱歉,这是打字错误,已更新。示例LINQ查询导致N+1 SQL查询,但不复制异常。可能与EF Core版本有关-我使用的是最新的stable 2.2.6,您使用的EF Core的确切版本是什么?对您来说太糟糕了,因为很多东西在预览版本中不起作用。您应该使用最新的stable 2.x并等待3.0版本。@IvanStoev holy。。。我最终按照您的建议将EF core从preview7降级到2.2.6,一切正常……非常感谢您指出示例LINQ查询和异常之间存在差异。异常消息引用了
FirstUserMinDto
方法的
List
参数,我在查询中没有看到该参数。请提供复制问题的真实示例。抱歉,这是打字错误,已更新。示例LINQ查询导致N+1 SQL查询,但不复制异常。可能与EF Core版本有关-我使用的是最新的stable 2.2.6,您使用的EF Core的确切版本是什么?对您来说太糟糕了,因为很多东西在预览版本中不起作用。您应该使用最新的stable 2.x并等待3.0版本。@IvanStoev holy。。。我最终按照你的建议将EF core从preview7降级到了2.2.6,一切正常……非常感谢你指出这一点
IEnumerable<IotaProjectDisplayDto> results = _db.IotaProjects.Select(x => new IotaProjectDisplayDto
            {
                Id = x.Id,
                ProjectName = x.ProjectName,
                Create = x.Create,
                Owner = x.Owners.Select(y => y.User).Select(z => new UserMinDto { Id = z.Id, FullName = z.FullName, ShortName = z.ShortName }).FirstOrDefault()
            });
            return results;
Expression of type 'System.Collections.Generic.List`1[ToolHub.Shared.iota.UserMinDto]' cannot be used for parameter 
of type 'System.Linq.IQueryable`1[ToolHub.Shared.iota.UserMinDto]' 
of method 'ToolHub.Shared.iota.UserMinDto FirstOrDefault[UserMinDto](System.Linq.IQueryable`1[ToolHub.Shared.iota.UserMinDto])' (Parameter 'arg0')