VS 2011 で作成された単純な asp.net MVC4 / EF 4.1 プロジェクトがあり、ドメイン モデル用のレイヤーと、DbContext を含むデータベース用のレイヤーがあります。Batch と呼ばれる 1 つの基本的なドメイン クラスと、Index / Create / Edit アクションを使用する標準の CRUD 機能を備えた BatchController があります。オーバーライドされた Seed メソッドを使用して、2 つの既定のレコードを追加します。これはすべて正常に機能し、すぐに使用できる MVC テンプレートを使用してレコードを追加/編集/削除できます。
public class BatchController : Controller
{
private readonly MyContext _context = new MyContext();
public ActionResult Index()
{
return View(_context.Batches.ToList());
}
[HttpPost]
public ActionResult Create(Batch batch)
{
if (ModelState.IsValid)
{
this._context.Batches.Add(batch);
this._context.SaveChanges();
return RedirectToAction("Index");
}
return View(batch);
}
}
json 経由でデータを取得できるように、ドメイン オブジェクトを公開する目的で、新しい MVC4 Web API プロジェクトをソリューションに追加しました。これは、BatchesController と呼ばれる API コントローラーを使用し、ドメインとデータベース レイヤーへの参照を追加しました。Get() メソッドが 2 つあります。1 つはすべてのバッチを返し、もう 1 つは ID を指定して 1 つのバッチを返します。メインの MVC アプリと Web API をホストするために IIS Express を使用しています。すべてのバッチを取得するには、ブラウザーでこれを実行します。
http://localhost:46395/api/batches
これが私のWeb APIコントローラーです:
public class BatchesController : ApiController
{
private readonly MyContext _context;
public BatchesController()
{
_context = new MyContext();
}
// GET /api/batches
public IEnumerable<Batch> Get()
{
var batches = _context.Batches.ToList();
if (batches == null)
throw new HttpResponseException(HttpStatusCode.NotFound);
return batches;
}
// GET /api/batches/5
public Batch Get(int id)
{
var batch = _context.Batches.Find(id);
if (batch == null)
throw new HttpResponseException(HttpStatusCode.NotFound);
return batch;
}
}
私の問題は、新しいレコードを追加してブラウザ経由で取得しようとすると、シード メソッドで追加された既存のレコードのみが返されることです。新しく追加されたレコードが返されません。DbContext は最初のレコードをキャッシュしているようで、最新のレコードを取得するためにデータベースにアクセスしていないようです...新しく追加されたレコードを返すにはどうすればよいですか?