我正在使用Entity Framework将数据撤回到Web API服务中公开。我们的Model有一个ProductDetails对象,它有一个Product对象,它有一个Category对象。因此,在我的Get操作调用的上下文中,我要求它包含Product(但不包括Category):
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重置后的第一次加载,数据就像我想要的那样。如果我重新加载页面,突然分类已完全填充。这是一个线索吗?
答案 0 :(得分:1)
我还怀疑延迟加载是原因,因为序列化程序将访问相关对象的每个属性。也许你可以关闭整个上下文的延迟加载,只是使用急切加载?以下显示如何关闭上下文的延迟加载:
value="{{dataLine}}"
您最终应该使用包含CategoryId的序列化对象,而不是Category对象本身。