【发布时间】:2012-06-17 21:41:47
【问题描述】:
我有一个使用 VS 2011 创建的简单 asp.net MVC4 / EF 4.1 项目,其中一个层用于我的域模型,一个用于包含 DbContext 的数据库。我有一个名为 Batch 的基本域类和一个具有标准 CRUD 功能的 BatchController 使用索引/创建/编辑操作。我使用重写的 Seed 方法添加了两个默认记录。这一切都很好,我可以使用开箱即用的 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);
}
}
我向解决方案添加了一个新的 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 我从 global.asax 中删除了它设置自己的数据库的行。我正在使用与主项目相同的 DbContext:“_context = new MyContext()”。我让它返回在 Seed 方法中创建的默认记录,所以我知道它指向同一个数据库。
-
@JSancho 解决了你是对的问题,它仍在使用它自己的数据库...我已经从 global.asax 文件中删除了实例化数据库的行,但连接字符串仍在网络中.config 文件。用我正确的配置文件替换它。如果您想添加您的回复作为答案,我会给您
-
完成!很高兴知道你管理队友。感谢您的反馈。
标签: asp.net-mvc entity-framework asp.net-web-api