是否有可能急切地加载相关实体,但是没有加载相关实体的相关实体?
就我而言,我有一组标志来确定应该加载哪些相关实体:
[Flags]
public enum FooRetrievalOptions
{
None = 0,
Bar = 1,
Baz = 2,
All = Bar | Baz
}
我创建了一个IQueryable< Foo>并且依赖于已经设置的标志。
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上的导航属性。
我只想在一个数据库命中中加载关联的实体,而不加载它们自己的相关实体。这可能吗?
答案 0 :(得分:0)
创建数据传输对象(DTO)并将所需的值复制到该数据传输对象中,然后再将其传递给序列化。在开发API以帮助处理EF循环引用并且仅返回消费者所需的内容时,这样做是很常见的。
编辑:关于所有属性看似乏味的手动映射,有一些解决方案可以帮助解决这个问题,例如Automapper:http://automapper.org/