【发布时间】:2014-01-27 11:05:38
【问题描述】:
好的,所以我不知道发生了什么以及为什么我不断收到我的数据库上下文已被处理的错误。让我告诉你我有什么然后引导你完成它。
控制器:
[HttpPost]
public ActionResult UserProfile(UserProfileViewModel model)
{
bool success = false;
var user = UserRepository.GetUserById((int)Session["UserId"]);
success = user.FriendId == null
? FriendRepository.CreateUserProfile((int) Session["UserId"], model)
: FriendRepository.UpdateUserProfile((int) Session["UserId"], model);
if (!success) return View("UserProfile");
UpdateSession((int) Session["UserId"]);
return RedirectToAction("AddSteamQuestion", "Steam");
}
private void UpdateSession(int id)
{
var user = UserRepository.GetUserById((int)Session["UserId"]);
Session["UserFirstName"] = user.Friend.Alias;
}
所以首先它成功地抓取了用户。然后它在我的仓库中插入或更新用户配置文件。这似乎也很成功。最后它需要更新会话中的用户名(以防万一他们改变了它)。所以它跳到更新会话方法然后我得到抛出的错误?这不像 GetUserId 坏了,我在我的应用程序中大量使用它。事实上,它成功地在 UserProfile 方法中提取了第一个 var 用户的数据。
错误提示 DbContext 已被释放。
这是我为 GetUserById 疯狂的巨大回购(它在 var user = 上中断):
public UserModel GetUserById(int sessionId)
{
try
{
using (db)
{
var user = (from u in db.Users
join f in db.Friends on u.FriendId equals f.Id
where u.Id == sessionId
select new UserModel()
{
CreatedOn = u.CreatedOn,
EmailAddress = u.EmailAddress,
FriendId = u.FriendId,
Id = u.Id,
RoleId = u.RoleId,
Friend = new FriendModel
{
Alias = f.Alias,
CarrierId = f.CarrierId,
CreatedOn = f.CreatedOn,
FirstName = f.FirstName,
Id = f.Id,
LastName = f.LastName,
Locked = f.Locked,
PhoneNumber = f.PhoneNumber,
SteamId = f.SteamId
}
}).SingleOrDefault();
return user;
}
}
catch (SqlException e)
{
throw new InvalidOperationException("Cannot Get User By Id", e);
}
}
【问题讨论】:
标签: c# asp.net-mvc repository-pattern