【发布时间】:2018-11-23 09:08:47
【问题描述】:
这个问题已经被问过很多次了。我想我解决了我的问题,但由于我是初学者并且仍在学习,我需要你的保证。
我为登录用户做了一个扩展方法但是当我在我的控制器中使用它时,它给了我标题错误。
System.ObjectDisposedException: 'ObjectContext 实例已被释放,不能再用于需要连接的操作。'
所以我搜索并试验并添加了这行代码 在控制器中解决了我的问题。
db.Users.Attach(LoggedUser);
但是我不确定我的答案是否正确,因为很多关于这个问题的答案都是禁用延迟加载,但我最终没有使用它。
类似的东西。
public class MyDbContext : DbContext
{
public MyDbContext()
{
this.Configuration.LazyLoadingEnabled = false;
}
}
这是我的扩展方法:
public static ApplicationUser GetLoggedInUserInDB(this System.Security.Principal.IPrincipal _User)
{
using (var db = new ApplicationDbContext())
{
string userId = _User.Identity.GetUserId();
var LoggedUser = db.Users.Find(userId);
return LoggedUser;
}
}
我的控制器:
public class MainPageController : ApiController
{
[Route("Personal_Project/Main_Page_Personal_Project/UserUnfo")]
[ResponseType(typeof(string))]
[Authorize]
public IHttpActionResult GetUserInfo()
{
using (var db = new ApplicationDbContext())
{
var LoggedUser = User.GetLoggedInUserInDB();
//db.Users.Attach(LoggedUser); // This is what I added to solve my problem.
return Ok(new UserInfoModel
{
Name = LoggedUser.UserName,
Reputation = LoggedUser.Reputation,
UserLevel = LoggedUser.UserLevel
});
}
}
}
那么这里的“我的”解决方案好吗?只需添加:
db.Users.Attach(LoggedUser);
这是合法的还是我们不是这样解决这个问题的。任何建议将不胜感激
按要求添加:
堆栈跟踪:
ex.StackTrace " 在 System.Data.Entity.Core.Objects.ObjectContext.get_Connection()\r\n
在 System.Data.Entity.Core.Objects.ObjectQuery1.GetResults(Nullable1 forMergeOption)\r\n 在 System.Data.Entity.Core.Objects.ObjectQuery1.Execute(MergeOption mergeOption)\r\n at System.Data.Entity.Core.Objects.DataClasses.EntityReference1.Load(MergeOption 合并选项)\r\n 在 System.Data.Entity.Core.Objects.DataClasses.RelatedEnd.DeferredLoad()\r\n 在 System.Data.Entity.Core.Objects.Internal.LazyLoadBehavior.LoadProperty[TItem](TItem propertyValue, String relationshipName, String targetRoleName, Boolean mustBeNull,对象 wrapperObject)\r\n at System.Data.Entity.Core.Objects.Internal.LazyLoadBehavior.c__DisplayClass7`2.b__2(TProxy 代理,TItem 项)\r\n 在 System.Data.Entity.DynamicProxies.ApplicationUser_3D8410FBA1701532D53558B4E07B366CC45F4901DA609FCE10D652D704EEDD3C.get_CarGame()\r\n 在 PersonalProject.Controllers.MainPageController.GetUserInfo() 中 C:\Users\Jack\Desktop\PostPersonalProject\PersonalProject\PersonalProject\Controllers\MainPageController.cs:line 32" 字符串
【问题讨论】:
-
请显示完整的堆栈跟踪。将
LoggedUser附加到另一个上下文看起来毫无意义。 -
我添加了堆栈跟踪。你说的毫无意义是什么意思?如果我添加它,它会起作用。否则不是。
标签: c# asp.net asp.net-web-api2 asp.net-identity