【发布时间】:2026-01-26 01:15:01
【问题描述】:
是否可以热切加载相关实体,但不加载相关实体的相关实体?
就我而言,我有一组标志来确定应该加载哪些相关实体:
[Flags]
public enum FooRetrievalOptions
{
None = 0,
Bar = 1,
Baz = 2,
All = Bar | Baz
}
我创建一个 IQueryable
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 上的导航属性。
我只是想在一个数据库匹配中加载关联实体,而不加载它们自己的相关实体。这可能吗?
【问题讨论】:
-
你用什么库来序列化你的对象?
-
DataContractSerializer。我可以使用 IsReference = true 来处理循环,但这似乎会导致相当大的 XML。
-
延迟加载在上下文中被禁用。这就是为什么我要指定急切加载哪些相关实体。
-
如果您使用的是 .NET 4.5,
IgnoreDataMemberAttribute呢? -
在这种情况下这无济于事。该属性在某些情况下是必需的,但不是全部,具体取决于标志。
标签: c# entity-framework serialization entity-framework-6 eager-loading