我有一個簡單的asp.net MVC4/EF 4.1項目用VS 2011創建,一個圖層用於我的域模型,另一個用於我的數據庫包含DbContext。我有一個名爲Batch的基本域類和一個帶有使用索引/創建/編輯操作的標準CRUD功能的BatchController。我用重寫的Seed方法添加兩個默認記錄。這一切工作正常,我可以使用開箱MVC模板的添加/編輯/刪除記錄:Web api不返回新添加的記錄從EF 4.1 DbContext
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);
}
}
我添加了一個新的MVC4的Web API項目的解決方案與暴露的域對象,因此數據的意圖可以通過json獲取。這使用了我稱之爲BatchesController的api控制器,並且添加了對我的域和數據庫層的引用。我有兩個Get()方法,一個返回所有批次,另一個返回給定ID的單個批次。我使用IIS Express來託管主MVC應用程序和Web API。要檢索所有批次我在瀏覽器中運行這個命令:
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;
}
}
我的問題是,當我添加一個新的記錄,並嘗試通過瀏覽器進行檢索,只有使用Seed方法返回的現有記錄纔會返回 - 我無法獲取任何新添加的記錄來返回。 DbContext似乎是緩存最初的記錄,而不是去數據庫獲取最新的...我如何返回新添加的記錄?
它可能是瀏覽器緩存。我注意到這與WCF REST,IE瀏覽器比Chrome更糟糕。你可以刪除瀏覽器緩存並重新運行? –
只是爲了清楚顯而易見,您已經重新將Web API項目重新連接到指向同一個數據庫,對吧? 因爲默認情況下,Web API將附加自己的SQL Compact DB。 這意味着你可以有效地使用2個獨立的數據庫。 – JSancho
我清除了緩存但導致它不返回任何記錄(!)。 @JSancho我從global.asax中刪除了它設置自己的數據庫的行。我正在使用主項目使用的相同DbContext:「_context = new MyContext()」。我得到它返回在Seed方法中創建的默認記錄,所以我知道它指向相同的數據庫。 –