Entity Framework - 浅预加载?

Entity Framework - Shallow Eager Loading?

是否可以预先加载相关实体,但不加载相关实体的相关实体?

就我而言,我有一组标志来确定应加载哪些相关实体:

[Flags]
public enum FooRetrievalOptions
{
    None = 0,
    Bar = 1,
    Baz = 2,
    All = Bar | Baz
}

我创建了一个 IQueryable 并连续 .Include 取决于设置了哪些标志。

IQueryable<Foo> query = context.Foos;

if (fooRetrievalOptions.HasFlag(FooRetrievalOptions.Bar))
{
    query.Include(f => f.Bar);
}

if (fooRetrievalOptions.HasFlag(FooRetrievalOptions.Baz))
{
    query.Include(f => f.Baz);
}

List<Foo> foos = query.ToList();

问题是它可以在序列化时根据 Bar 和 Baz 上的导航属性创建循环。

我只是想在一个数据库命中中加载关联实体,而不加载它们自己的相关实体。这可能吗?

创建一个数据传输对象 (DTO) 并将您想要的值复制到其中,然后再将其传递以进行序列化。在开发 API 以帮助处理 EF 循环引用并且仅 return 消费者需要什么时,通常会做这种事情。

编辑:关于看似繁琐的所有属性手动映射,有一些解决方案可以帮助解决这个问题,例如 Automapper:http://automapper.org/