【发布时间】:2012-02-13 21:00:53
【问题描述】:
我已经为我的 MVC 3 项目实现了一个基本控制器,以允许一种从我的数据库上下文访问用户实体的通用方式:
public abstract class MyBaseController : Controller
{
protected DBEntitiesContainer db;
protected override void Initialize(System.Web.Routing.RequestContext requestContext)
{
base.Initialize(requestContext);
this.db = new DBEntitiesContainer();
}
public UserDetails GetActiveUserDetails()
{
UserDetails userDetails = GetObjects.GetActiveUserDetails(this.db);
return userDetails;
}
}
这很好用,我所有的控制器都可以访问this.db.MyEntity,并且可以通过调用this.GetActiveUserDetails()来检索UserDetails对象
但是,当我尝试对实体执行更新时,问题就出现了:
public class UpdateController : MyBaseController
{
public ActionResult Index()
{
UserDetails userDetails = this.GetActiveUserDetails();
userDetails.LastOnline = DateTime.Now;
UpdateModel(userDetails);
this.db.SaveChanges();
}
}
知道为什么UserDetails 对象很容易检索,但是当我在调用SaveChanges() 后检查我的数据库时,什么都没有更新?我假设我正在以两种不同的方式访问我的上下文,但我看不到我是怎样的......!
编辑:这里是 GetObjects.GetActiveUserDetails() 方法
public static UserDetails GetActiveUserDetails(DBEntitiesContainer db)
{
MembershipUser membershipUser = Membership.GetUser();
UserDetails userDetails;
try
{
if (membershipUser != null)
{
userDetails = (from u in db.UserDetails
where (u.UserId == (System.Guid)membershipUser.ProviderUserKey)
select u).First();
}
else
{
return GetGuestAccount();
}
}
catch
{
return GetGuestAccount();
}
return userDetails;
}
不是我所知道的最干净的方法...
【问题讨论】:
-
可以显示
GetObjects.GetActiveUserDetails(this.db)的方法体吗?
标签: asp.net-mvc controller entity savechanges updatemodel