Asp.net web api 防止EF加载实体集合上的关系或序列化Web API

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

我在Web API服务中使用.NET 4.5中的Entity Framework 5.0向客户端提供REST数据。我想向客户返回对具有关系的实体的浅层查询的结果。我想在整个实体集合中这样做,而不仅仅是其中一个实体(这就是为什么我不直接回答这个问题)。根据我目前所看到的情况:

    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
都会被加载正如你的第一个链接答案所建议的那样?我将其设置为全局性的,但当我最初评论时,我突然想到,我可能完全没有抓住实际问题的关键。因此,我相应地编辑了标题、标签和问题。