我正在构建一个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 isn`t。从DataProxies.Content到COntent的复制并不是我梦寐以求的解决方案,因为Jon注意到它有点奇怪。
db.Content.ToList()
的所有样本都没有帮助:/我被认为是
答案 0 :(得分: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
});
}
}
...只是直接复制属性。
答案 1 :(得分:1)
var list = db.Content.ToList();
答案 2 :(得分:1)
我找到了解决方案。至少我认为我做了
我用
db.Configuration.ProxyCreationEnabled = false;
我得到的普通对象不是代理动态实体
关于你的问题Jon。我如何暴露这种方法?没什么好说的。我从模板创建了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;
}
}
这是全班。你可以看到的不多:)