2013-12-15 182 views
2

我有一個在POST和PUT都被調用的方法。該方法更新當前用戶的用戶名。查詢看起來像:LINQ查詢沒有返回正確的結果

public override void Save() 
{ 
    if (SessionManager.CurrentSession.Query<User>() 
            .Any(u => u.Username == this.Username)) 
     throw new DuplicateNameException("Username already exists"); 
    ... 

也能正常工作的POST每次我嘗試創建一個新用戶存在一個數據庫中的用戶名時,它拋出DuplicateNameException。然而,在PUT上,當我嘗試將現有的用戶名更改爲已存在的用戶名時,此異常從未受到影響。我不知道爲什麼查詢將不同於POST和PUT。有什麼想法嗎?提前致謝。

+2

等待,如果您不更改用戶名,但用戶已經存在,那麼'Any'條件將返回'true',因爲同一用戶的記錄與過濾器匹配? –

+0

@JeanHominal爲了確保我的理解正確,如果當前用戶名是[email protected],那麼如果我不更改用戶名,並且嘗試PUT併發送[email protected],那麼執行如果陳述是真實的?是的,是這樣。現在這不是最好的用戶體驗,他們應該在用戶使用當前用戶名時彈出取消消息,而不是使用他們已有的用戶名發送消息。 – Crystal

回答

2

奇數。你已經確認你期望執行的代碼實際上正在執行?如在,PUT調用不會導致這被跳過或其他方法被調用呢?而PUT調用實際上是擊中服務器?當進行PUT調用時,實際上正確填充了「用戶名」?當進行PUT調用時,「CurrentSession」屬性和「Query」調用實際上綁定了它們應該返回的數據並返回數據(例如,它可能返回一個空列表,因爲某些連接或其他設置尚未設置在這種情況下)?

+0

是的,我實際上已經檢查過,當PUT被調用時它得到了這個方法,但是它跳過了我完全困惑的if條件語句。用戶名是我所期望的,就像原來的名字是[email protected],並且我將其更改爲[email protected](假設[email protected]已經存在),if語句返回false。我需要像你提到的那樣檢查CurrentSession屬性和Query。這些ORM中的一些東西對我來說很新。 – Crystal

0

您是否從表單中獲取用戶名?我認爲用戶名不能正確傳遞給PUT。

+0

PUT不是來自表單。我們使用主幹,在保存時,PUT被調用。我基本上從輸入字段中使用jQuery獲取元素,填充我的主幹對象,然後調用save()。 – Crystal