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 変数を返すときも同じです。

アップデート:

手伝ってくれてありがとう。主な質問はまだ立っています。通常のリストが正しく返され、データベースから作成されたリストが返されない理由。DataProxies.Content から 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

解決策を見つけました。少なくとも私はやったと思う

私が使う

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 に答える
1
var list = db.Content.ToList();
于 2012-08-10T16:36:35.363 に答える