为模型添加控制器时,生成的操作将如下所示
public ActionResult Edit(int id = 0)
{
Entity entity = db.Entities.Find(id);
if (entity == null)
{
return HttpNotFound();
}
return View(entity);
}
现在,在我的例子中,我采用了一个字符串 id,它可以通过多种方式映射到 DB 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);
}
whereEntityLookup
将任意函数映射string id
到Entity
并返回HttpNotFound
或调用以检索到的实体作为参数的操作。