EF Core ICollection 不包含 'Include' 的定义
EF Core ICollection does not contain a definition for 'Include'
我有一个头部模型和一个细节模型,它们之间有导航属性。我想获得包含详细信息的头部记录。这工作正常,但我得到的详细记录不包含我需要的所有属性,所以我尝试添加 Include()。
EF Core 说 ICollection<RequestDetail> does not contain a definition for 'Include'
。我已经尝试过使用 List<> 导航类型,Microsoft.EntityFrameworkCore
和 System.Linq
都在我的使用范围内。
我的模特:
public class RequestHead
{
public string Id { get; set; }
public DateTime CreateDate { get; set; }
public int CreateUserId { get; set; }
[ForeignKey("CreateUserId")]
public User CreateUser { get; set; }
public virtual ICollection<RequestDetail> Details { get; set; }
}
public class RequestDetail
{
[Key]
public int Id { get; set; }
public string RequestHeadId { get; set; }
[ForeignKey("RequestHeadId")]
public RequestHead RequestHead { get; set; }
public DateTime CreateDate { get; set; }
public int CreateUserId { get; set; }
[ForeignKey("CreateUserId")]
public User CreateUser { get; set; }
}
Select:
var requests = (from r in _ctx.RequestHeads
select new RequestDTO {
AcceptDate = r.AcceptDate,
AcceptUser = r.AcceptUser,
AcceptUserId = r.AcceptUserId,
Details = r.Details != null ?
r.Details.Include(x => x.BuyerUser).Select(x => new
RequestDetailDTO(x, x.Attachments.ToArray(), x.Product)).ToArray() : null});
更新#1:
这不是 Json.ReferenceLoopHandling 问题。它已经在 startup.cs 中被忽略了,我的问题是我不能在我的代码中使用 Include() 而不仅仅是在 json.
中没有必要的属性
如果在 .NET 上开发 - 确保您使用的是 System.Data.Entity 命名空间。
using System.Data.Entity;
如果在 .NET Core 上 - 请改用 Microsoft.EntityFrameworkCore。
using Microsoft.EntityFrameworkCore;
就像错误提示的那样:你的属性 r.Details是一个ICollection(一个导航属性)并且没有暴露一个.Include()方法,它只适用于IQueryables(扩展方法)。包含路径应从返回的 IQueryable 指向您希望包含的导航属性,在您的情况下,这应该类似于
.Include(x=>x.Details.Select(y=>y.BuyerUser))
我有一个头部模型和一个细节模型,它们之间有导航属性。我想获得包含详细信息的头部记录。这工作正常,但我得到的详细记录不包含我需要的所有属性,所以我尝试添加 Include()。
EF Core 说 ICollection<RequestDetail> does not contain a definition for 'Include'
。我已经尝试过使用 List<> 导航类型,Microsoft.EntityFrameworkCore
和 System.Linq
都在我的使用范围内。
我的模特:
public class RequestHead
{
public string Id { get; set; }
public DateTime CreateDate { get; set; }
public int CreateUserId { get; set; }
[ForeignKey("CreateUserId")]
public User CreateUser { get; set; }
public virtual ICollection<RequestDetail> Details { get; set; }
}
public class RequestDetail
{
[Key]
public int Id { get; set; }
public string RequestHeadId { get; set; }
[ForeignKey("RequestHeadId")]
public RequestHead RequestHead { get; set; }
public DateTime CreateDate { get; set; }
public int CreateUserId { get; set; }
[ForeignKey("CreateUserId")]
public User CreateUser { get; set; }
}
Select:
var requests = (from r in _ctx.RequestHeads
select new RequestDTO {
AcceptDate = r.AcceptDate,
AcceptUser = r.AcceptUser,
AcceptUserId = r.AcceptUserId,
Details = r.Details != null ?
r.Details.Include(x => x.BuyerUser).Select(x => new
RequestDetailDTO(x, x.Attachments.ToArray(), x.Product)).ToArray() : null});
更新#1:
这不是 Json.ReferenceLoopHandling 问题。它已经在 startup.cs 中被忽略了,我的问题是我不能在我的代码中使用 Include() 而不仅仅是在 json.
中没有必要的属性如果在 .NET 上开发 - 确保您使用的是 System.Data.Entity 命名空间。
using System.Data.Entity;
如果在 .NET Core 上 - 请改用 Microsoft.EntityFrameworkCore。
using Microsoft.EntityFrameworkCore;
就像错误提示的那样:你的属性 r.Details是一个ICollection(一个导航属性)并且没有暴露一个.Include()方法,它只适用于IQueryables(扩展方法)。包含路径应从返回的 IQueryable 指向您希望包含的导航属性,在您的情况下,这应该类似于
.Include(x=>x.Details.Select(y=>y.BuyerUser))