2016-12-16 24 views
0

일부 데이터를 생성하고 db에 저장하는 간단한 콘솔 프로그램을 구현하려고합니다. 문제는 코드를 통해 레코드를 삽입 할 때만 프로그램이 작동한다는 것입니다. SqlServer Management Studio를 사용하여 만든 테이블에서 일부 레코드를 읽으려고하면 레코드가 제대로 작동하지 않습니다. 또한이 값을 읽으려는 시도가 어떻게 든 테이블의 데이터를 삭제하는 것으로 보입니다. 실행 후 SqlServer를 확인하면 이전에 삽입 한 레코드가 사라집니다. 이것은 내가 읽기를 수행하는 부분은 :Fluent Nhibernate : SqlServer Management Studio를 통해 삽입 된 데이터베이스의 레코드를 읽지 않습니다.

using(var session = NHibernateHelper.OpenSession()) 
{ 
    using(var transaction = session.BeginTransaction()) 
    { 
     var DepartmentObject = InsertDepartment("IT", "962788700227"); 
     var firstEmployee = InsertEmployee("Jacopo", "disoccupated", DepartmentObject); 
     var secondEmployee = InsertEmployee("Andrea", "programmatore", DepartmentObject); 
     var thirdEmployee = InsertEmployee("Davide", "fashion-blogger", DepartmentObject); 
     session.Save(DepartmentObject); 
     session.Save(firstEmployee); 
     session.Save(secondEmployee); 
     session.Save(thirdEmployee); 
     transaction.Commit(); 
     var elencoEmployee = session.Query<Employee>().ToList(); // this reading is working because I create the table and insert values via code 
     var elencoTabTest = session.Query<TabTest>().ToList(); // this reading return a list of 0 elements but on the db there is a table named TabTest with 2 records 
    } 
} 

InsertEmployeeInsertDepartment 함수는 속성을 설정 Employee/Department 개체를 만듭니다. 누군가가 몇 가지 아이디어를 가지고

class TabTest 
{ 
    public virtual int Id { get; set; } 
    public virtual string Descrizione { get; set; } 
} 

class TabTestMap : ClassMap<TabTest> 
{ 
    public TabTestMap() 
    { 
     Id(x => x.Id); 
     Map(x => x.Descrizione); 
     Table("TabTest"); 
    } 
} 

경우 공유하십시오 :

내가 읽고 싶은 테이블을 매핑해야하는 클래스 TabTest입니다.

답변

0

아니요, NHibernate는 레코드를 쿼리 할 때 레코드를 삭제하지 않습니다. 적어도 세 가지 가능한 설명을 생각해 볼 수 있습니다.

전체 코드가 표시되지 않으므로 행을 삭제하거나 테이블을 자르거나 테이블을 삭제하고 다시 만드는 코드가 있습니다.

또는 행을 만들고 트랜잭션을 닫기 전에 트랜잭션을 커밋하지 않을 때 트랜잭션을 사용하고 있습니다.

또 다른 가능성은 구성 또는 매핑 실수로 인해 프로그램이 다른 테이블이나 다른 데이터베이스에서 읽는 것입니다.

+0

이 표의 두 번째 점과 관련하여 표를 매핑하는 클래스에있는 코드로 코드를 편집했습니다. Session.Query를 사용하여 읽기만 코드로 수행합니다. . – jacopinho04

+1

그럼에도 불구하고 "선택이 깨지지 않았습니다"(https://blog.codinghorror.com/the-first-rule-of-programming-its-always-your-fault/). 추가 한 코드 조각은 아무것도 증명하지 못합니다 (이 조각은 아직 완전한 실행 가능 프로그램이 아니므로 코드가 분명합니다). 당신은 당신이하는 모든 것을 검토 할 필요가 있습니다. 정확히 같은 데이터베이스의 같은 테이블에서 읽으려고하십니까? 스크립트를 프로그래밍하거나 테스트 할 때 또는 매번 실행할 때 데이터베이스를 다시 초기화하지 않는 것이 확실합니까? NHibernate.SQL에 대한 로깅을 켜거나 SQL 프로파일 러를 사용하여 전체 그림을 얻습니다. –