2012-03-02 8 views
0

JavaScriptアプリケーション(SignalRのバックエンドにASP.net MVC 3)があり、必要なフィールドだけを返したい(動的でなければならない)。ASP.NET MVC 3 - リターン専用の動的オブジェクトを作成する

私はエンティティフレームワークを使用しますが、チェックするためのフィールドやクライアントサイドで必要とされないメソッドのフィールドが必要なため、特定の列のみを選択できません。

ので、現在、私はこの行います

public void GetPerson(int personID) 
    { 
     // Some logic... 

     // person is a entity from the entity framework (Person) 
     dynamic p = new 
     { 
      ID = person.ID, 
      FirstName = person.FirstName, 
      LastName = person.LastName 
     }; 

     Clients[Context.ConnectionId].loadPerson(p); 
    } 

しかし、その良い練習(パフォーマンスなど)かどうかは、わかりません。より良い解決策があるのですか、それとも私はまだ動的なタイプを続けることができますか?

+3

私はあなたの例を理解していません。 pは作成しますが、使用しないでください。 –

+0

これは彼がうまくいくでしょう(あなたはある時点でpを返すと仮定します)。私はあなたが保存する帯域幅が本当にそれほど多くあるかどうか疑問に思います。多くのオブジェクトを返す場合、またはトラフィックが多い場合はおそらくその価値がありますが、どちらも該当しない場合は必要ではないかもしれません。 –

+0

@ミステアマン、それを編集する。私はpを返す。 –

答えて

2

ExpandoObjectをお使いですか?

あなたの例では、ダイナミックタイプの代わりに匿名タイプを使用することもできます。

var p = new 
     { 
      ID = person.ID, 
      FirstName = person.FirstName, 
      LastName = person.LastName 
     }; 

これにより、コンパイル時のチェックが行われるようになります。しかしどちらもうまくいくはずです。匿名と動的の詳細については、thisを参照してください。

0

私によく見えます。他の列が必要な場合は、それらを返して、それらと一緒にやりたいことをやってから匿名の人を作成して渡してください。

0

MVCのベストプラクティスは、JSONまたはSignalRを使用してビューまたはクライアントにデータを返すかどうかにかかわらず、厳密に型指定されたオブジェクトを使用することです。返すデータ専用のViewModelを作成して使用してください。私は通常、[コントローラ] [アクション] ViewModelの規約を使用してこれらのクラスの名前を付けます。だから1つはMemberDetailsViewModelかもしれません。

利点としては、コンパイル時間のチェック、シリアル化の容易化、後で修正するときの問題の軽減などがあります。

MVCで最初に遊んだときのやり方を正確に試しました。私を信頼してください、あなたが今得ていると感じる利便性の価値はありません。

返されるデータが動的でなければならない場合は、キー値のペアのコレクションを返すとよいでしょう。

関連する問題