我有一个头像和一个细节模型,它们之间具有导航属性。我想获得包括详细信息的正式记录。效果很好,但是我得到的详细记录并不包含我需要的所有属性,因此我尝试添加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; }
}
选择:
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()。
答案 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;