2012-12-21 2 views
1

우리는 SProc 기반 솔루션을 ORMLite로 마이그레이션하고 있으며 지금까지는 꽤 어려움이있었습니다. 오늘 나는 다음과 같은 방법을 썼다 :ServiceStack ORMLite

public AppUser GetAppUserByUserID(int app_user_id) 
    { 
     var dbFactory = new OrmLiteConnectionFactory(this.ConnectionString, SqlServerOrmLiteDialectProvider.Instance); 
     AppUser item = null; 

     var rh = new RedisHelper(); 
     var id= CacheIDHelper.GetAppUserID(app_user_id); 
     item = rh.Get<AppUser>(id); 

     if (item == null) 
     { 
      try 
      { 
       using (var db = dbFactory.OpenDbConnection()) 
       { 
        item = db.Single<AppUser>("application_user_id={0}", app_user_id); 

        rh.Set<AppUser>(item, id); 
       } 
      } 
      catch (Exception ex) 
      { 
       APLog.error(ex, "Error retrieving user!"); 
      } 
     } 
     return item; 
    } 

을 나는 외부 필드의 일부를 제거해야하지만, 기본적으로 다음과 같습니다

[Alias("application_user")] 
public class AppUser : APBaseObject 
{ 

    [Alias("application_user_id")] 
    [AutoIncrement] 
    public int? UserID 
    { 
     get; 
     set; 
    } 

    [Alias("application_user_guid")] 
    public string UserGUID 
    { 
     get; 
     set; 
    } 

//MORE FIELDS here. 

} 

도전은 채울 것이다 그들은 단지 필드는 ID 필드라는 것이다, ID를 메서드에 전달하기 때문에 ID를 이미 알고 있습니다.

나는 마지막 SQL을 호출하고 DB에 대해 직접 실행했으며 모든 필드가 올바르게 참조되고있었습니다.

디버거에서 코드를 단계별로 실행했는데 반환 된 유일한 필드가 ID 인 경우를 제외하고는 모든 것이 올바르게 돌아 왔습니다.

생각하십니까?

+0

여전히 문제가 있습니다 ... 도움이 필요하십니까? –

답변

2

DB에 올바르게 매핑되지 않은 클래스 메서드로 인해 발생했던 비슷한 문제가 발생했습니다. 정확한 문제는 db의 nullableint 필드로 인해 발생했으며 클래스 메서드는 'int?'대신 'int'으로 정의되었습니다.

아마도 비슷한 문제가 있습니까?

+0

과거에 비슷한 문제가 있었지만 오류가 발생 했더라도 자동 로그가 나오면 좋겠다. – mosesfetters