1

我正在构建一个 webapi,但我遇到了奇怪的问题。

当我做这样的事情

List<Content> items = new List<Content>();

而不是我向它添加项目

items.Add(new Content());

而不是我调用 url localhost/api/Content/Get 我会用我的项目得到一个很好的 xml 但是当我做这样的事情时

public IEnumerable<Content> Get()
{
    List<Content> population = new List<Content>();
    Content[] test = new Content[5];

    var tmp = from c in db.Content select c;
    using (IEnumerator<Content> enumerator = tmp.GetEnumerator())
    {
        while (enumerator.MoveNext())
        {
            Content ctmp = (Content)enumerator.Current;
            population.Add(ctmp);
        }
    }
    return population;
}

我调用相同的 url 我得到空白(白色)页面。当我返回 tmp 变量时,同样想。

更新:

感谢帮助。主要问题仍然存在。为什么正常的 List 会正确返回,而从 db 创建的 List 却不是。从 DataProxies.Content 复制到内容并不是我梦寐以求的解决方案,而且 Jon 注意到这有点奇怪。

没有任何样品有db.Content.ToList()帮助:/我很困惑

4

3 回答 3

2

大概您的 SQL 查询没有找到任何项目,因此该方法返回的列表为空。请注意,您的代码可以更简单地表示为:

public IEnumerable<Content> Get()
{
    return db.Content.ToList();
}

或者可能:

public IEnumerable<Content> Get()
{
    return db.Content.Cast<Content>().ToList();
}

您需要多解释一下,db.Content以便我们为您提供更多帮助。也许您应该创建一个新的数据库上下文?例如:

public IEnumerable<Content> Get()
{
    using (FooDataContext db = new FooDataContext())
    {
        return db.Content.ToList();
    }
}

编辑:如果您真的想确保您只是返回Content对象,而不是动态代理,您可以编写如下内容:

public IEnumerable<Content> Get()
{
    using (FooDataContext db = new FooDataContext())
    {
        return db.Content
                 .ToList()
                 .Select(c => new Content { Name = c.Name,
                                            Foo =  c.Foo,
                                            // etc
                         });
    }
}

...只是直接复制属性。

于 2012-08-10T16:35:19.253 回答
1
var list = db.Content.ToList();
于 2012-08-10T16:36:35.363 回答
1

我找到了解决方案。至少我认为我做到了

我用

db.Configuration.ProxyCreationEnabled = false;

比我得到普通对象而不是代理动态实体

关于你的问题乔恩。我如何公开该方法?没什么好说的。我已经从模板创建了 ApiController 并刚刚编辑了方法

    public class ContentController : ApiController
{
    private signsEntities db = new signsEntities();

    // GET api/content
    public IEnumerable<Content> Get()
    {
        db.Configuration.ProxyCreationEnabled = false;
        Content[] test = this.db.Content.ToArray<Content>();
        return test;
    }
}

这是全班。没有你能看到的:)

于 2012-08-10T19:59:44.647 回答