当延迟加载禁用时,如何通过实体框架仅将导航属性的特定属性包含到查询中?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当延迟加载禁用时,如何通过实体框架仅将导航属性的特定属性包含到查询中?相关的知识,希望对你有一定的参考价值。
我的项目禁用了LazyLoading。我想获得具有类别导航属性的Id = 1的Product。但我只需要类别的Id和Name属性。这就是为什么我希望类别导航属性只有这两个字段。是否可以创建这样的查询?
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public dobule Price{ get; set; }
public string Description { get; set; }
public bool IsDeleted { get; set; }
public DateTime CreatedDate { get; set; }
public DateTime ModifiedDate { get; set; }
public int CategoryId{ get; set; }
public Category Category{ get; set; }
}
public class Category
{
public int Id { get; set; }
public string Name { get; set; }
public dobule Description{ get; set; }
public Category IsDeleted { get; set; }
public DateTime CreatedDate { get; set; }
public DateTime ModifiedDate { get; set; }
}
答案
如果您只需要几个特定字段,则需要明确选择它们。像这样的东西会起作用:
dbContext.Products
.Select(p => new Product
{
Id = p.Id,
Name = p.Name,
// etc... The fields you need from product go here
Category = new Category
{
Id = p.Category.Id,
Name = p.Category.Name
}
}
拥有仅具有两个字段的Product和Category模型类可能更好。现在,您的方法将返回一个Category对象,该对象缺少调用者可能不期望的大多数字段的值。取决于你究竟在做什么。
另一答案
如果您在调用数据库之前知道自己想要什么,则取决于。
context.Entry(yourEntity).Reference(a => a.Category).Load();
更多例子here。
以上是关于当延迟加载禁用时,如何通过实体框架仅将导航属性的特定属性包含到查询中?的主要内容,如果未能解决你的问题,请参考以下文章
C#,Winform绑定实体框架(Entity Framework)的实体,如何去掉或隐藏导航属性?