gpt4 book ai didi

c# - 如何禁止由于序列化而延迟加载子对象?

转载 作者:太空宇宙 更新时间:2023-11-03 13:07:46 24 4
gpt4 key购买 nike

我正在使用 Entity Framework 提取数据以在 Web API 服务中公开。我们的模型有一个 ProductDetails 对象,它有一个 Product 对象,它有一个 Category 对象。因此,在我的 Get 操作调用的上下文中,我要求它包含产品(但不包含类别):

results = context.ProductDetails.Include("Product");

因此,在我的服务结果中,我得到例如(为输入而缩短的 XML):

<ProductDetails>
...
<Product>
...
<Category>
<Name>Example Category name</>
...
</>
<CategoryId>1</>
</>
<ProductId>17</>
</>

我假设序列化导致 Category 变得“延迟加载”,即使我真的不希望它这样做。我如何避免得到比我要求的更多的东西?我想得到:

<ProductDetails>
...
<Product>
...
<Category i:nil="true"/>
<CategoryId>1</>
</>
<ProductId>17</>
</>

我如何查询(或告诉序列化程序)保留 CategoryId 但不检索完整的类别?

编辑,供引用,这里是产品型号:

[Table("PRODUCT", Schema = "MySchema")]
public class ProductSqlModel
{
private CustomTypeConverter _converter = new CustomTypeConverter();

[Key]
[Column("CODE")]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public virtual int? Id { get; set; }

[Column("CATEGORY_CODE")]
public virtual int? CategoryId { get; set; }

[ForeignKey("CATEGORY_ID")]
public virtual CategorySqlModel Category { get; set; }

...
}

编辑:我的行为有些不一致——IIS 重置后的第一次加载,数据是我想要的。如果我重新加载页面,突然类别被完全填充。这是线索吗?

最佳答案

我还怀疑延迟加载是原因,因为序列化程序将访问相关对象的每个属性。也许您可以关闭整个上下文的延迟加载并只使用预加载?下面展示了如何关闭上下文的延迟加载:

public class SomeContext : DbContext 
{
public SomeContext()
{
this.Configuration.LazyLoadingEnabled = false;
}
}

您最终应该得到包含 CategoryId 的序列化对象,而不是 Category 对象本身。

关于c# - 如何禁止由于序列化而延迟加载子对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30175578/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com