我有一个包含可以具有属性Id,Name和BinaryData的附件的Punches的模型。在EF6中只包含部分实体包括
如果我这样做:
var result = context.PunchSet
.Where(p => p.PunchType == punchType && p.Project.Id == projectId)
.Include(c => c.Contractor)
.Include(c => c.ClearedBy)
.Include(c => c.CreatedBy)
.Include(a => a.Attachments)
查询是慢如molassis因为附件既可以是很多大。在这种情况下,我需要的是附件的ID和名称。所以,我想:
var result = context.PunchSet
.Where(p => p.PunchType == punchType && p.Project.Id == projectId)
.Include(c => c.Contractor)
.Include(c => c.ClearedBy)
.Include(c => c.CreatedBy)
.Include(a => a.Attachments.Select(a2 => new Attachment() { Id=a2.Id, Name=a2.Name});
但与此错误结束:
The Include path expression must refer to a navigation property defined on the type. Use dotted paths for reference navigation properties and the Select operator for collection navigation properties. Parameter name: path
有不知道这意味着什么,我一直坚持了几个小时。如何在结果中包含部分实体?即不要读取二进制数据。
不能部分包括您可以迭代。但是,如果您只想阅读而不更新,则可以在附件上省略附件并单独加载附件。 – grek40
我该如何在同一个查询中做到这一点?我不想加载500拳,然后必须通过循环来获取任何附件(如果有的话)。这将是一个好的旧SQL 5分钟的工作。有时这个EF6的东西正在让我。 – Paaland
如果您需要加载部分相关的实体,则需要使用匿名类型或DTO来投影您的查询。作为异常解释,你只能在'Include'扩展方法中引用导航属性 – octavioccl