moonmile solutions 分室

ソフトウェア開発者の情報収集をリアルタイムで垂れ流し...という具合に行きます。

ASP.NET MVC の Bind 属性は何のためにあるのか?

ASP.NET MVC 5 で Entity Framework の Model と連携させて MVC テンプレートを作ると、

public ActionResult Create([Bind(Include="Id,分類,商品名,単価,数量")] 商品 商品)

な感じで、Create メソッドに Bind 属性が付いてくる。
MSDN のヘルプを見ると

BindAttribute.Include プロパティ (System.Web.Mvc)
http://msdn.microsoft.com/ja-jp/library/system.web.mvc.bindattribute.include(v=vs.108).aspx

のようにバインドするプロパティを指定するらしいのだが、これって、

・そもそもフォームから送ってくるバインド先は、名前が同じでないと無理だろう。
・送信されるパラメータとバインドは、Model クラスのプロパティのほうが良いのではないか?

と思ったのだが、どうなんでしょう?

で、実際 EF を使って、Entity Data Model を作ってみると、実は、このプロパティに属性をつけることが困難なことがわかる。Model1.edmx をデータベースから作成した後に、このクラス自体を弄ることが難しいわけ。なそうなると、モデル自体に属性をつけるのは不可能なので、「フォームから送られてくるパラメータ」と「モデルが持つプロパティ」の結び付けは、先のようなコントローラーの Create アクションメソッドで設定しないとダメ、ってのがこの Bind 属性の正体なのかな?と思ったり。

ちなみに、モデルクラスを直接弄って属性をつける方法は、逆引きで書いたので後でブログにもで詳細を書く?