2016-10-20 7 views
0

私のWebApiはオブジェクト間の内部参照がたくさんあるため、アプリケーションにはコストがかかりません。私はEFデータベースを最初に使用しているので、生成されたクラスへのアクセス権がありません(私はそれらを編集できますが、スマートではありません)。WebApi関連エンティティを返す速度

たとえば、私は5つの関係を持ついくつかの領域があります。これらの関係は深いですが、すべてのデータを使用しないためちょうど親オブジェクトが必要と私は私のオブジェクトのコピーを作成するいくつかのViewModelsを作成して、私はAutoMapperを使用している周りに働く。

いくつかのエンティティを返すだけの私のApiのいくつかの点では、私はAutoMapperを起動し、その場合無視すべきことを教えてくれるでしょう。

私の問題は、私が言ったように、私は多くのデータを持っています、このシステムは15k - 20kユーザーのために使用されるつもりです。データを無視しているAutoMapperはボトルネックになっていますか?もしそうなら、私は何か他の選択肢を使うのが良いでしょうか?

これが最善の選択肢でない場合は、他に何が使えますか?

これは私が働いているかの例です:

コントローラー:

public async Task<EventVM> Get(int id) 
{ 
    var event = await eventService.Get(id); 

    return event; 
} 

はサービス:

public async Task<EventoVM> Get(int id) 
{ 
    var event = await _context.Event.FindAsync(id); 

    return event; 
} 

も、私は私の設定にチェックし、遅延ロードが有効になっています。

+1

Entity Frameworkは既定で遅延読み込みを使用するため、関連するデータのみを既に取得する必要があります。また、まずEFコードを使用していると言いましたが、生成されたクラスにアクセスすることはできません。それはどういう意味ですか? –

+1

EFクラスへのアクセスなしでCodeFirstをどのように使用できますか? –

+0

申し訳ありませんが、私は最初にEF DBを使用しています、私は、私の悪い質問を修正します! – Terkhos

答えて

2

あなたの最初の投稿の中のいくつかは明確ではありません。

あなたはまずコードを使用しますが、生成されたクラスにはアクセスできないとします。最初にコードを使用するとクラスは生成されませんが、最初にSQLテーブルを生成するクラスをいくつか用意する必要があります。

大まかには、WebApiでEFのものを使用しないでください。 Apiは各エンドポイントに必要なデータとプロパティのみを返します。これは、他のクラスのクラスを作成することを意味します。これは、より軽量なtipically DTOであり、必要なデータだけを持つpublicプロパティのみのメソッドはありません。はい、間にデータを変換するために余分なステップが必要ですが、それはまったく問題ありません。

重要なルールを覚えておいてください。必要なものだけを返すだけです。

+0

はい、私はCFとDBFで小さなミスを犯しました。それは意味をなさないのです。私はあなたに完全に同意します。そのため、私はあなたのDTOを記述したのと同じように私のViewModelsを使い始めました。 AutoMapperを使って後で困惑させないように助けてくれるのかどうか疑問に思っていました。 – Terkhos

+1

nah、Automapperがあなたのためにマッピングを行います。本当に何も壊すことはできません。それは私が心配するものではありません。あなたがそれを好きでないと判明した場合や十分に役立つものではない場合は、他のマッピングツールで置き換えることができます。 –

+0

偉大な、私を悩ますことは、レイジーローディングはこのような状況を処理するべきではないですか?なぜ私はすべてのものを与えているのですか?私が 'Include'を使う場合にのみ起こるべきではありませんか? – Terkhos

関連する問題