EF Core ICollection不包含“包含”的定义

时间:2018-07-24 09:11:01

标签: c# entity-framework entity-framework-core ef-core-2.1

我有一个头像和一个细节模型,它们之间具有导航属性。我想获得包括详细信息的正式记录。效果很好,但是我得到的详细记录并不包含我需要的所有属性,因此我尝试添加Include()。

EF Core说ICollection<RequestDetail> does not contain a definition for 'Include'。我已经尝试过使用List <>导航类型,并且Microsoft.EntityFrameworkCoreSystem.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; }
}

选择:

 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中已经被忽略,我的问题是,即使在我的代码中,我不仅不能在json中没有必要的属性,也无法使用Include()。

2 个答案:

答案 0 :(得分:1)

这就像错误提示:您的属性r.Details是一个ICollection(导航属性),并且不公开.Include()方法,该方法仅可用于IQueryables(扩展方法)。包含路径应​​从返回的IQueryable指向您希望包含的导航属性,在您的情况下,应类似于

.Include(x=>x.Details.Select(y=>y.BuyerUser))

答案 1 :(得分:0)

如果在.NET上进行开发-请确保您使用的是System.Data.Entity命名空间。

using System.Data.Entity;

如果在.NET Core上-请改用Microsoft.EntityFrameworkCore。

using Microsoft.EntityFrameworkCore;