我已经实现了一个基本的控制器为我的MVC 3的项目,允许从我的分贝范围内访问用户实体的一种常见方式:对实体上下文访问ASP 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)'的方法体吗? – Eranga 2012-02-13 23:10:37