2010-06-02 2 views
1

간단한 업데이트를하려고합니다 ... SubSonic ActiveRecord를 사용하여 ISNULL()이 작동하는 유일한 방법은 CodingHorror를 사용하는 것입니다. 예 :SubSonic의 CodingHorror가 ISNULL을 수행하는 유일한 방법입니까?

public void MarkMessagesRead(long? from_person) 
    { 
     if (from_person.HasValue) 
     { 
      _db.Update<message>() 
       .Set(x => x.is_read == true) 
       .Where(x => x.from_id == from_person && x.to_id == people_id) 
       .Execute(); 
     } 
     else 
     { 
      new SubSonic.Query.CodingHorror(_db.DataProvider, "UPDATE messages SET is_read=1 WHERE ISNULL(from_id) AND [email protected]", people_id).Execute(); 
     } 
    } 

내가 누락 된 항목이 있습니까?

답변

1

:

나는 서브 소닉의 GitHub의에서 이러한 문제를 모두 로그인 한 github에 현재 소스에!

+0

굉장합니다. 감사. –

2

은 당신이 "그리고 (X => x.from_id) .IsEqualTo (널)?

+0

그래서 난 그냥이 시도 : _db.Update () .SET를 (X => x.is_read == true)가 어디에요 (X => x.to_id == people_id) .And (X = > x.from_id) .IsEqualTo (null) .Execute(); 하지만이 얻을 : - SubSonic.Query.Update ' –

+0

뜨아을'에 대한 정의를 포함하지 않는 '와 나는 스틱을 의미 으악 그리고 어디에서 : "어디 (X => x.to_id && X .from_id == null) " –

+0

감사합니다. Rob. 그것을 시도하고 컴파일하고 실행하지만 레코드가 업데이트되지 않습니다. (mysql에 대해 실행 중). 생성 된 SQL은 UPDATE'messages'입니다. SET'is_read' = @ up_is_read WHERE'from_id' = @ 0. ISNULL()이어야합니까? 최근에 수정 되었습니까? 저는 아음속의 약간 오래된 버전을 실행 중이며 출시하기 직전에 업데이트를 꺼리고 있습니다. –

0

이 작동하지 않는 이유는 두 가지 이유가있다. 첫째

, 그것은 Where<message>()을해야 할 시도 했 하지 Where() :

db.Update<message>() 
      .Set(x => x.is_read == true) 
      .Where<message>(x => x.from_id == from_person && x.to_id == people_id) 
      .Execute(); 

Where() 방법은 버그가 - 그것은 비교가 그래서 모든 등 < < = 같은 평등과 사업자에 대한 비교가되고 입력 손실 .. 모든 길을 잃을 또한, 만 사용합니다. 첫 번째 비교. 위의 예에서 && x.to_id == people_id은 자동으로 삭제됩니다.

둘째로, 하위 음향의 ==null!=null에 대한 지원이 주석 처리되었습니다. 두 가지 문제가 수정되었습니다 - 작동합니다 cantabilesoftware가 제공하는 코드가

관련 문제