【发布时间】:2016-11-11 20:38:28
【问题描述】:
我有一个使用默认 VS15 模板和“defaultconnection”连接字符串的 asp.net 身份设置的 web api。我在解决方案中添加了一个类库,并在此基础上从我的数据库中添加了一个实体框架 ado.net 模型。我将类库的 app.config 文件中的连接字符串添加到我的 Web 配置中。
API 上的 Web.config 连接字符串:
<connectionStrings>
<add name="DefaultConnection" connectionString="Data Source=MyDatabase;Initial Catalog=Dev;Integrated Security=True" providerName="System.Data.SqlClient" />
<add name="IBPC_DevEntities" connectionString="metadata=res://*/IBPCDataModel.csdl|res://*/IBPCDataModel.ssdl|res://*/IBPCDataModel.msl;provider=System.Data.SqlClient;provider connection string="data source=MyDatabase;initial catalog=Dev;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
</connectionStrings>
对于测试,我正在尝试从我的 api 控制器获取用户信息的请求:
[Authorize]
public HttpResponseMessage Get(int id)
{
using (IBPC_DevEntities entity = new IBPC_DevEntities())
{
return Request.CreateResponse(HttpStatusCode.OK,
entity.User.FirstOrDefault(u => u.NDBHUserID == id));
}
}
当我在 Postman 中发送请求(使用授权令牌)时,它会以 InnerException 响应“ObjectContext 实例已被释放,不能再用于需要连接的操作。”
如何在自己的项目中使用数据库优先 EF6 并从使用默认连接进行身份验证的 API 中引用它?
【问题讨论】:
-
我猜你正在使用延迟加载,所以当从 using 块内部返回时,包装的上下文在获取延迟加载的属性之前被处理。检查this。也许是这样。
-
默认情况下,实体框架使用延迟加载,除非通过禁用它来指定。
标签: c# asp.net asp.net-mvc entity-framework asp.net-identity