2013-12-15 3 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 내가 DB에 존재하는 이름으로 새 사용자를 만들려고 할 때마다 잘 동작은, 그것은 DuplicateNameException를 던졌습니다 : 같은 쿼리 보인다. 그러나 PUT에서 이미 존재하는 사용자 이름으로 기존 사용자 이름을 변경하려고 시도하면이 예외가 발생하지 않습니다. POST와 PUT간에 쿼리가 다른 이유는 알 수 없습니다. 이견있는 사람? 미리 감사드립니다.

+2

잠깐, 사용자 이름을 변경하지 않았지만 사용자가 이미 존재하면 동일한 사용자의 레코드가 필터와 일치하기 때문에 'Any'조건이 'true'를 반환하지 않습니까? –

+0

@JeanHominal 따라서 현재 사용자 이름이 [email protected] 인 경우 사용자 이름을 변경하지 않고 PUT을 시도하고 [email protected]이 전송되면 올바르게 이해하는지 확인하십시오. 진술서 통치가 사실이라면? 그렇습니다. 가장 좋은 UX가 아닌 지금, 그들은 모달이 현재 사용자 이름으로 팝업하고 이미 가지고있는 것과 동일한 사용자 이름으로 보내지 않을 때 취소해야합니다. – Crystal

답변

2

이상한 실행될 것으로 예상되는 코드가 실제로 실행되고 있음을 확인했습니다. 마찬가지로 PUT 호출이 건너 뛰거나이 대신에 다른 메서드가 호출되지 않습니다. 그리고 PUT 호출은 실제로 서버를 때리는 것입니까? PUT 호출이 이루어지면 실제로 "사용자 이름"이 올바르게 채워지고 있습니까? PUT 호출이 이루어지면 "CurrentSession"속성과 "Query"호출이 실제로 있어야 할 내용에 바인딩되고 예상 한 데이터를 반환합니다 (예 : 일부 연결 또는 다른 연결이 설정되어 있지 않아 빈 목록을 반환 할 수 있습니까? 이 경우)?

+0

예 실제로 PUT이 호출 될 때이 메소드에 도달하는지 확인했지만 if 조건문을 건너 뛴다. 완전히 혼란 스러웠다. 사용자 이름은 원래 이름이 [email protected] 인 것처럼 [email protected]으로 바뀌 었습니다 ([email protected]이 이미 있다고 가정) if 문은 false를 반환합니다. 내가 언급 한 CurrentSession 속성과 쿼리를 확인해야합니다. 이 ORM 물건 중 일부는 나에게 꽤 새로운 것입니다. – Crystal

0

양식에서 사용자 이름을 가져 왔습니까? 사용자 이름이 PUT에 제대로 전달되지 않는다고 생각합니다.

+0

PUT이 양식에없는 것입니다. 우리는 백본을 사용하고 저장시 PUT이 호출됩니다. 기본적으로 입력 필드에서 jquery를 사용하여 요소를 가져 와서 내 백본 객체를 채우고 save()를 호출합니다. – Crystal

관련 문제