我已经为我的 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
并可以通过调用来检索UserDetails
对象this.GetActiveUserDetails()
但是,当我尝试对实体执行更新时出现问题:
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;
}
不是我知道的最干净的方法......