代码之家  ›  专栏  ›  技术社区  ›  Perrier

ef core ICollection不包含“include”的定义

  •  0
  • Perrier  · 技术社区  · 7 年前

    我有一个头部和一个细节模型,它们之间有导航属性。我想得到包括细节在内的总记录。这很好,但是我得到的详细记录不包含我需要的所有属性,所以我尝试添加include()。

    EF核心说 ICollection<RequestDetail> does not contain a definition for 'Include' 。我已经尝试过列出<gt;导航类型和 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; }
    }
    

    选择:

     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.referenceloophanding问题。在startup.cs中它已经被忽略了,我的问题是即使在代码中也不能使用include(),而不仅仅是JSON中没有必要的属性。

    2 回复  |  直到 7 年前
        1
  •  1
  •   DevilSuichiro    7 年前

    与错误提示类似:您的属性r.details是一个ICollection(导航属性),它不公开.include()方法,该方法只对iqueryables(扩展方法)可用。include路径应该指向从返回的iQueryable到您希望包含的导航属性,在您的情况下,这应该是沿着

    .Include(x=>x.Details.Select(y=>y.BuyerUser))
    
        2
  •  0
  •   eja    7 年前

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

    using System.Data.Entity;
    

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

    using Microsoft.EntityFrameworkCore;