【发布时间】:2015-08-09 20:16:48
【问题描述】:
我正在使用 EF 和 Oracle 数据库构建一个简单的 ASP.NET API。当我想从数据库表中获取所有元素时,响应 (500) 会显示“操作无法完成,因为 DbContext 已被释放”。
好吧,我已经尝试过解决这个问题,然后才将它发布到这里。但我不能。我的控制器代码如下。
public class PruebasController : ApiController
{
//Prueba[] pruebas = new Prueba[]
//{
// new Prueba { Name = "Tomato Soup"},
// new Prueba { Name = "Yo-yo"},
// new Prueba { Name = "Hammer"}
//};
public IQueryable<Prueba> GetAllPruebas()
{
Database.SetInitializer(new DropCreateDatabaseAlways<OracleDbContext>());
using (var ctx = new OracleDbContext())
{
return ctx.Pruebas;
}
}
}
(如您所见,我有一个“pruebas”列表,当我返回它时,http 服务可以正常工作)
这是我的 OracleDbContext
public class OracleDbContext : DbContext
{
public DbSet<Prueba> Pruebas { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.HasDefaultSchema("DATA");
}
}
【问题讨论】:
-
正如 Brino 在他的回答中提到的那样。或者,您可以在控制器中实例化您的上下文(可能在启动期间)并在处置您的控制器时处置它。这样,您可以继续使用当前的构造,而不必回退到 ToList oid。
标签: c# asp.net entity-framework