我已經實現了一個基本的控制器爲我的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