Background Image

FORUM

?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

* 질문 등록 시 다음의 내용을 꼭 기입하여 주세요.
OS
Window7, 2012 Server R2 64bit
CUBRID Ver.
NHibernate for Cubrid
CUBRID TOOL Ver.

응용 환경(API)
.NET, Asp.NET, C#

* CUBRID 응용 오류, SQL 오류 또는 SQL 튜닝 관련된 문의는 반드시 다음의 내용을 추가해 주세요. 비밀글이나 비밀 댓글도 가능합니다.
* 저희가 상황을 이해하고, 재현이 가능해야 알 수 있는 문제들이 많습니다. 가능한 정보/정황들을 부탁합니다.
에러 내용 및 재현 방법 재현 가능한 Source와 SQL
관련 테이블(인덱스, 키정보 포함) 정보 CUBRID 홈 디렉토리 아래 log 디렉토리 압축


-------------- 아래에 질문 사항을 기입해 주세요. ------------------------------------------------------------------------


1. .NET 4.5 에서의 NHibernate 문제점

   - 이후 처리가 불가능하여 이후 어떤점이 문제가 발생할 지 알 수 없으나 .NET 4.0 에서 정상 작동하던 코드가 4.5 에서는 오류를 발생 시킵니다.

   - 샘플 Code : session.QueryOver<CODE_INOUT>().Where(t=>t.C_GRP_CD == "AUTHTYPE").List().ToList();

   - 오류 메시지 

     could not execute query

[ SELECT this_.c_grp_cd as c1_0_0_, this_.c_comn_cd as c2_0_0_, this_.c_comn_cd_nm as c3_0_0_ FROM tb_code this_ WHERE this_.c_grp_cd = ? ]

  Name:cp0 - Value:AUTHTYPE

[SQL: SELECT this_.c_grp_cd as c1_0_0_, this_.c_comn_cd as c2_0_0_, this_.c_comn_cd_nm as c3_0_0_ FROM tb_code this_ WHERE this_.c_grp_cd = ?]

   - 내용 : query 로 변경 중 cp0 에 해당하는 변수를 c_grp_cd 의 조건과 매칭시켜야 하는데 해당 처리중 오류가 발생했다고 보입니다.


2. .NET 4.0 에서 Nhibernate + TransactionScope 의 동시 처리 문제점

   - Nhibernate  ISession 개체의 Flush() 메소드와 System.Transactions.TransactionScope 를 동시에 사용했을 경우 발생하는 문제점 입니다.

   - 샘플 Code: 


      using (var scope = new TransactionScope())

      {

ISession session = ..............................;

             List<AA> test = session.QueryOver<AA>().Where(t => t.C_GRP_CD == "AUTHTYPE").List().ToList();

             foreach (AA dto in test)

             {

                 dto.C_OPT_1 = "OK_" + dto.C_OPT_1;

             }

             session.Flush();

             throw new Exception("test");

             scope.Complete();

      }


   - 위와 같은 코드에서, Oracle / MSSQL 과 같이 분산 트랜잭션이 지원되는(MSDTC 또는 OracleMTS)DB 에서는 

     session.Flush() 메소드가 실행되어도, 이후 scope.Complete() 를 실행하지 못하였기 때문에 DB 의 변경작업이 

     실패 합니다.


      허나, 큐브리드 Hibernate 모듈을 사용하여 CUBRID DB 에 접속 했을 경우, session.Flush() 가 존재하지 않는다면

     scope.Complete() 를 실행여부에 따라 트랜잭션이 정상 처리 됩니다

      이 때, session.Flush() 가 먼저 실행 되었다면 scope.Complete() 의 실행 여부와 관계 없이 DB 변경 작업이 수행되고

      이후 scope.Complete() 를 실행하지 못하고 오류가 발생 하더라도 DB Rollback 은 수행 되지 않습니다.


      즉, session.Flush() 가 먼저 실행되면 TransactionScope 를 무시한다고 볼 수 있겠습니다.


      코드에서 scope.Complete() 실행시에 오류를 발생시키지는 않지만 

      분산트랜잭션을 지원한다고 하는 CUBRID DB 와 TransactionScope 를 사용했을 때 예상 되는 동작이 아니게 되며 

      이에 대해 개발 코드의 변경이 필요 하게 되었습니다.


      

 위 두가지 문제점 에 대한 처리 방안을 문의 드립니다.


그럼 수고 하시고 빠른 답변 부탁 드립니다..





  • ?
    성진 2017.07.06 20:11

    안녕하세요. 큐브리드를 이용해주셔서 감사 합니다.

    1. .NET Framework 4.0/4.5 호환성 문제 테스트 결과 문제 없는 것으로 확인 되었습니다.


    아래와 같이 Nhibernate를 사용해서 demo DB Athlete테이블을 검색하는 경우 

    .NET 4.0/4.5 모두 정상 동작을 확인하였습니다

    CUBRID 9.3.6.0002 및 ADO.Net 드라이버는 9.3.0.0001을 사용했습니다.

     

     using (var session = sessionFactory.OpenSession())

    {

             List<Athlete> athlete = session.QueryOver<Athlete>().Where(t => t.nation_code == "LTU").List().ToList();

     

              Console.WriteLine(

                            string.Format("|{0}|{1}|{2}|{3}|{4}|",

                            AlignCenter(athlete[0].code.ToString(), 5),

                            AlignCenter(athlete[0].name, 30),

                            AlignCenter(athlete[0].gender, 5),

                            AlignCenter(athlete[0].nation_code, 5),

                            AlignCenter(athlete[0].athlete_event, 20))

              );

    }


    따라서, 사용하신 소스 및 환경에 문제가 있을 수 있으니 재확인 필요 하실 것 같습니다.


    2. ADO.Net 드라이버는 XA 지원하지 않습니다.


List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 SQLGate for CUBRID 영구 무료 라이선스 제공 file admin 2020.04.09 4255
3976 "DATABASE 검사" 도무지 끝날 기미가 안 보입니다 5 한종희 2011.08.02 8582
3975 "DBMS, 0, Unknown DBMS error" 요건 무슨 애러인가요?;; 2 eitetu 2011.06.02 14292
3974 "Token length is too long" 오류에 관하여 질문 드립니다. 4 file 김우람 2009.01.09 21475
3973 & 등의 특수문자등이 변환되어 저장되는 경우 1 호랑이야옹 2012.12.28 10671
3972 ' 의 입력 방식이 궁금합니다. 1 이석희 2009.04.10 13421
3971 (1개의 댓글은 작성자가 썼습니다.)비주얼 베이직 큐브리드 연동후 동시에 여러 테이블 보는 방법문의 2 secret 강남우 2012.12.21 58
3970 (Re:) 회원가입이 3명이상 안돼요... 6 딩이 2010.07.08 7595
3969 (python)centOS7 docker 연결 문의입니다. 리얼비 2021.11.01 104
3968 (댓글 질문등록 했습니다.)이전글, 다음글 기능(LAG, LEAD) ORDER BY절 FOR ORDERBY_NUM() 추가해도 그대로 입니다 3 취우다 2017.04.19 5946
3967 (함수)펑션 오류 확인부탁드립니다. 1 초코초코초 2023.02.10 98
3966 *variable* 에러 1 hwon 2013.06.14 11617
3965 ++ cubrid server start: fail 2 file 토네이도 2013.09.13 13691
3964 -74 오류 조치 방법 1 덜쇠 2013.08.07 7641
3963 .AccessViolationException (C#) 1 swift 2021.06.03 203
» .NET 4.5 에서의 NHibernate 문제, .NET 4.0 에서 NHibernate + TransactionScope 활용 문제. 1 websiter 2017.06.09 2052
3961 .NET DB 제어를 위한 방법. 2 우페 2008.11.23 60874
3960 .net db목록 관련 질문 드립니다. 4 파인 2021.03.05 134
3959 // 를 사용하고 싶습니다. 1 죽통군 2010.02.10 9583
3958 /etc/hosts 파일 수정 1 secret chocob 2014.10.13 13
3957 /etc/rc3.d/S98cubrid 화일 좀 바꿔주세요 1 꽁꽁단무지 2017.01.25 12245
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 199 Next
/ 199

Contact Cubrid

대표전화 070-4077-2110 / 기술문의 070-4077-2113 / 영업문의 070-4077-2112 / Email. contact_at_cubrid.com
Contact Sales