モデルのコントローラーを追加すると、生成されるアクションは次のようになります。
public ActionResult Edit(int id = 0)
{
Entity entity = db.Entities.Find(id);
if (entity == null)
{
return HttpNotFound();
}
return View(entity);
}
私の場合、いくつかの方法でDB IDにマップできる文字列IDを取得し、正しいエンティティを取得するためのコードを数行生成します。エンティティを取得するためにIDを取得するすべてのアクションにそのコードをコピーして貼り付けると、非常にエレガントではないと感じます。
取得コードをコントローラーのプライベート関数に配置すると、重複するコードの量が減りますが、それでも次のことが残ります。
var entity = GetEntityById(id);
if (entity == null)
return HttpNotFound();
属性でルックアップを実行し、エンティティをアクションに渡す方法はありますか?Pythonから来ているので、これはデコレータで簡単に実現できます。IOperationBehavior
まだ簡単ではないものを実装することで、WCFサービスに対して同様のことを行うことができました。IDでエンティティを取得することは頻繁に行う必要があることなので、コードをコピーして貼り付ける以外の方法があると思います。
理想的には、次のようになります。
[EntityLookup(id => db.Entities.Find(id))]
public ActionResult Edit(Entity entity)
{
return View(entity);
}
ここEntityLookup
で、は任意の関数マッピングstring id
を取得し、取得したエンティティをパラメータとしてアクションをEntity
返すか呼び出します。HttpNotFound