2015-07-12 56 views
0

我已經將用戶配置文件存儲在另一個名爲Agent的表中。代理表不包含任何導航屬性,因爲我找不到在代理表中存儲用戶標識的方法(在msdn中的例子中,即使他們沒有這樣做)。使用Lambda表達式比較用戶標識(MVC 5,標識)

代理有很多包,現在我有一個創建包視圖。我想存儲登錄的代理ID以存儲在軟件包中。因此,在中郵封裝控制器創建的ActionResult,我做這樣的事情:

var user = adb.Users.Where(p => p.Id == User.Identity.GetUserId()).Single(); 
     var agent = db.Agents.Where(p => p.ID == user.Agent.ID).Single(); 

(我有2個的datacontext,一個從應用程序的用戶,和一個我從datafirst EF了,我想將它們合併,但我得到錯誤。)

我收到錯誤。

System.InvalidOperationException

+0

user.identity.getUserId()把它拿出來,並在變量中分配ID –

+0

是的,這工作! – gasmsk

回答

0

Enumerable.Single返回序列中的唯一元件,並且如果存在的序列中的恰好一個要素是不拋出異常。它會拋出InvalidOperationException,因爲輸入序列包含多個元素,或者輸入序列爲空。

0

我認爲這個問題是在表中的數據(用戶代理)。 如果您按Id進行搜索,我希望這是表格的關鍵,所以我決定您沒有在一張表中添加相同的記錄,因此我們可以刪除重複的變體。如果您使用User.Identity.GetUserId(),則會給出背景以決定您的用戶帳戶已存在,並且Users表中的數據正常。 InvalidOperationException在這些地方你可以得到,如果有重複或數據不存在。重複的變體是留下來的,我希望你使用ID這樣的關鍵表格,所以你的問題是:你沒有Agent表中的任何用戶ID你從user.Agent.ID得到。兩種方式:代理中的數據錯誤,或者您從user.Agent.ID(可能是映射問題)中獲得不正確的Id。嘗試爲他創建新的用戶和新代理並運行你的代碼。你確定所有用戶都應該是代理嗎?

+0

所有用戶可以是代理或客戶。但唯一的問題是我必須單獨保存代理商和客戶,因爲數據不一樣。所以,我認爲真正的問題是,我如何使用戶ID密鑰成爲代理中的外鍵和主鍵? – gasmsk