それがあなたの言いたいことかどうかはわかりませんが、私がかなり頻繁に行っているアプローチの例を挙げることができます:
DBContext の一種の「ドメイン サービス クラス」を作成します。
public class MyDomainService : IDisposable
{
private MyDbEntities dbo;
private bool isDisposed;
public MyDomainService()
{
dbo = new MyDbEntities();
}
public User GetUser(string userName)
{
return (from usr in dbo.Users
where usr.UserName == userName
select usr).SingleOrDefault();
}
public void Dispose()
{
if (isDisposed)
return;
isDisposed = true;
dbo.Dispose();
}
}
andメソッドを拡張Controller
またはAsyncController
オーバーライドするカスタム Controller クラスを作成します。Initialize
Dispose
public class MyController : Controller
{
protected MyDomainService DomainService { get; private set; }
protected override void Initialize(System.Web.Routing.RequestContext
requestContext)
{
base.Initialize(requestContext);
DomainService = new MyDomainService();
}
protected override void Dispose(bool disposing)
{
DomainService.Dispose();
base.Dispose(disposing);
}
}
HomeController
これで、継承の例ごとに次のアプローチを使用できますMyController
public class HomeController : MyController
{
public ActionResult Index()
{
return View();
}
[HttpPost]
public ActionResult Index(string username)
{
var user = DomainService.GetUser(username);
if (user != null)
return RedirectToAction("Account", "Information");
return View();
}
}
これにより、コントローラーがきれいに保たれます。