【发布时间】:2018-07-24 09:11:00
【问题描述】:
我有一个 head 和一个 details 模型,它们之间有导航属性。我想获得包含详细信息的头部记录。这工作正常,但我得到的详细记录不包含我需要的所有属性,所以我尝试添加 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 中被忽略了,我的问题是即使在我的代码中我也不能使用 Include() ,而不仅仅是在 json 中没有必要的属性。
【问题讨论】:
-
我认为这不是重复的。我已经有 Json.ReferenceLoopHandling.Ignore 我的问题是我什至不能在我的代码中使用 Include() 不是因为它没有给我必要的属性。
-
就像错误所说的那样。 .Include 仅适用于 IQueryables,而 r.Details 是 ICollection(导航属性本身)。改为包含 x=>x.Details.Select(y=>y.BuyerUser)。
-
@DevilSuichiro 是的,我只需将导航属性添加到选择中,它就会全部加载。谢谢!你会发布答案吗?
标签: c# entity-framework entity-framework-core ef-core-2.1