2013-07-15 40 views
0

在我的第一個MVC應用程序上工作。我正在使用MVC4附帶的簡單成員資格數據庫來管理用戶和角色。我的理解是,我必須爲以下Find()電話執行三個步驟才能工作:獲取登錄人員的簡單成員GUID,使用簡單成員GUID在我的Couriers數據庫中獲取ID,然後使用該ID作爲在下面的Find()調用中缺少參數以返回要在視圖中編輯的模型/記錄?

如何將/作爲.Find()調用的參數使用?我在正確的軌道上,還是使這更復雜?MVC4 Linq數據庫調用

ps - 創建Courier記錄時,我將Couriers數據庫中的成員資格GUID保存在與Courier ID主鍵列不同的列中。謝謝。

public ActionResult EditCourier() 
    { 
     System.Web.Security.MembershipUser user = Membership.GetUser(); 
     var providerUserKey = user.ProviderUserKey; 
     Guid userId = (Guid)providerUserKey; 
     String userIDstring = userId.ToString(); 

     var model = 
      from c in db.Couriers 
      where c.CourierMembershipID == userIDstring 
      select c.ID; 

     Courier courier = db.Couriers.Find(); 

     if (courier == null) 
     { 
      return HttpNotFound(); 
     } 
     return View(courier); 
    } 

回答

0

MSDN文檔說:

使用主鍵值,以試圖找到由 背景追蹤的實體。如果實體不在上下文中,則將針對數據源中的數據執行和評估一個查詢 ,如果在上下文或數據源 中找不到該實體,則返回空 。

所以,如果你有用戶ID作爲在快遞表的主鍵,那麼你可以使用.Find()這樣的:

Courier courier = db.Couriers.Find(userId); 

否則應該使用標準LINQ查詢,然後調用.FirstOrDefault()SingleOrDefault()方法:

Courier courier = db.Couriers.FirstOrDefault(c=>c.CourierMembershipID == userIDstring); 

編輯:

我suppos Ë你從一個查詢得到這個錯誤:

var model = 
      from c in db.Couriers 
      where c.CourierMembershipID == userIDstring 
      select c.ID; 

的原因是,你從這個查詢IEnumerable<Courier>模型得到。 爲了使這個查詢來獲取單Courier對象試圖在最後調用.FirstOrDefault()

var model = (from c in db.Couriers 
       where c.CourierMembershipID == userIDstring 
       select c.ID).FirstOrDefault(); 
+0

謝謝。我簡化了我的問題。所以,請讓我這樣問。我試圖用linq查詢返回單個記錄返回到視圖,但我得到不能轉換ienumberable到Courier錯誤信息 –

+0

我編輯了我的答案 –

+0

非常感謝。使用.First在推進這個問題方面有很大的幫助。我也會嘗試FirstOrDefault。 –