Asp.net web api 防止EF加载实体集合上的关系或序列化Web API
我在Web API服务中使用.NET 4.5中的Entity Framework 5.0向客户端提供REST数据。我想向客户返回对具有关系的实体的浅层查询的结果。我想在整个实体集合中这样做,而不仅仅是其中一个实体(这就是为什么我不直接回答这个问题)。根据我目前所看到的情况:Asp.net web api 防止EF加载实体集合上的关系或序列化Web API,asp.net-web-api,entity-framework-5,Asp.net Web Api,Entity Framework 5,我在Web API服务中使用.NET 4.5中的Entity Framework 5.0向客户端提供REST数据。我想向客户返回对具有关系的实体的浅层查询的结果。我想在整个实体集合中这样做,而不仅仅是其中一个实体(这就是为什么我不直接回答这个问题)。根据我目前所看到的情况: public IEnumerable<JournalEntryType> GetAllJournalEntryTypesShallow() { // this is stupid but
public IEnumerable<JournalEntryType> GetAllJournalEntryTypesShallow() {
// this is stupid but I can't find a better way
var results = new List<JournalEntryType>();
using (var context = new SecondaryContentTrackingEntities()) {
foreach (var result in
from j in context.JournalEntryTypes
select j) {
result.JournalEntries.Clear();
results.Add(result);
}
}
return results;
}
public IEnumerable GetAllJournalEntryTypesShallow(){
//这很愚蠢,但我找不到更好的办法
var results=新列表();
使用(var context=new SecondaryContentTrackingEntities()){
foreach(var)导致
来自context.JournalEntryTypes中的j
选择(j){
result.JournalEntries.Clear();
结果。添加(结果);
}
}
返回结果;
}
然后为我自动序列化并返回给客户机。但这看起来真的很可怕,可能会把我立即扔掉的数据拉下来(尽管我怀疑如果我让惰性加载保持打开状态,这是不正确的-我还没有在引擎盖下进行足够的研究来知道)。我一直在想,必须有更好的方式告诉EF“在这种情况下,不要费心遍历关系。”
或者,有没有一种好方法可以让自动序列化变得肤浅,而不必自己编写?我知道我可以自己写,但似乎只是为了做一些相对简单的事情而编写了一堆代码
我不认为EF延迟加载或不加载都没有帮助,因为我无论如何都在迭代它们(它们正在被序列化),所以最终随着孩子们的加入,所有的东西都会被触及
我可以在设计器中删除引用,但是当我真的需要它们时,我会丢失它们很多次,而且每次从数据库更新时我都必须这样做,所以这也不理想
有更聪明的方法吗?是说,尽管您设置了
context.ContextOptions.LazyLoadingEnabled=false,但循环中每个结果的结果.JournalEntries
都会被加载代码>正如你的第一个链接答案所建议的那样?我将其设置为全局性的,但当我最初评论时,我突然想到,我可能完全没有抓住实际问题的关键。因此,我相应地编辑了标题、标签和问题。