私は、(別個のリポジトリを作成するのではなく).net MVC Unit of Work APIを実装しようとしていましたが、それは正しくはありません。私はこれについて正しい方法で行っていますか?この周りEntity Frameworkとリポジトリなしで簡単な作業単位を作成する
BaseController
public class BaseController : ApiController
{
protected DBEntities _dbEntities;
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
_dbEntities = new DBEntities();
}
protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
_dbEntities.SaveChanges();
}
}
MyController
public class MyController : BaseController
{
public HttpResponseMessage PutMyObject(int id, int id2)
{
if (id != 0)
{
var myObject = _dbEntities.MyObjects.Where(x => x.id == id);
if (myObject.Count() > 0)
{
MyObject temp = myObject.SingleOrDefault();
temp.Processed = true;
return Request.CreateResponse(HttpStatusCode.OK);
}
else
{
return Request.CreateErrorResponse(HttpStatusCode.NotFound);
}
}
else
{
/* do some other stuff */
}
}
}
私の思考は、コントローラのアクションは、単一の作業単位であるということです。コントローラのアクションが開始されるとデータベース接続が開き、応答が返されるとSaveChangesが呼び出されます。
私は正しい方法でこれについてお伝えしますか? savechangesがBaseController内で呼び出された後、_dbentitiesを処分する必要がありますか? (またはこれはコードレビュー交換のためのより良い質問です)
Spring/HibernateがJavaの世界でどのように動作するかはあまり変わりません。個人的には私はあまり熱心ではありませんが、あなた自身のアプリケーションのために十分に機能することがわかります。 –
これは[CodeReview.SE](https://codereview.stackexchange.com/)に適していると思います。私があなたの設定で見る唯一の実際の問題は、(a)コードを複製することなくMVCバックエンドを呼び出す以外の方法でデータにアクセスすることができないことです。(b) SaveChanges() '、例えばあなたが何かを保存してエラーを返すことを望まない中間的な方法を決めるとき。しかし、これは、例えば、 'SaveChanges()'が呼び出されないようにするブール型変数を持っています。 – Flater
'filterContext'で渡されたExceptionプロパティは、エラー状態を処理するために例外を使用しているかどうかを確認できます。 –