2013-07-11 28 views
0

我有一個存儲在會話中的自定義實體列表,因此用戶可以通過asp.net mvc網站中的數據進行分頁。用戶不是在編輯這個列表,而是在他們查看所有內容後才批准它。存儲在會話中的數據不會正確檢測上下文附件

List<scholarship> ss = x.scholarshipSet.Where(m => m.requriements != null).ToList(); 

Session["ListOfScholarships"] = ss; 

一旦他們瀏覽了列表並點擊它被批准,我就會標記它被批准的日期。

代碼

if (!x.IsAttached(s)) { 
    x.Attach(s); 
} 

無法正常工作的這一部分。它得到的if語句,如果實體已經附着其特別檢查裏面,然後引發錯誤

The 'scholarship' entity is already attached to a context. 

如果我不使用會話不會出現這種情況。它如何一秒鐘認爲該實體沒有附加,然後意識到它附在下一個?爲什麼會話會導致此問題?

回答

0

爲了將實體存儲在會話中,它必須被序列化。我想知道是否搞亂了CRM用來確定實體是否在上下文中的信息。您可以使用底層IOrgranizationalService,而不是使用Context來進行更新。

foreach (scholarship s in ss) { 
    // Create a new object just in case someone has edited some other field on the object since it was retrieved. 
    // This keeps the updated field from being overridden 
    service.Update(new scholarship(){ Id = s.Id, Approved = n}); 
} 
+0

這肯定是比我想出來的更好的工作;我沒有意識到你可以像這樣更新。如果我沒有比這更好的答案,我會在後面標記。 – orangeberri07