2011-01-13 5 views
0

유창한 nhibernate : 기록을 얻지 않는다

public class SKU 
{ 
    //public int Id { get; set; } 
    public string FactoruCode { get; set; } 
    public string Ptoduct { get; set; } 
} 

엔티티가 있고

 public class SKUMap : ClassMap<SKU> 
    { 
     public SKUMap() 
     {    
      Table("MST_PRODUCT"); 
      Not.LazyLoad(); 
      Id(x => x.Ptoduct).GeneratedBy.Assigned(); 
      Map(x => x.Ptoduct, "PRODUCT_NAME"); 
      Map(x => x.FactoruCode, "FACTORY_CODE"); 
     } 
    } 

으로 정의되고

class Program 
{ 
    static void Main() 
    { 
     var sessionFactory = CreateSessionFactory(); 
     using (var session = sessionFactory.OpenSession()) 
     { 
      using (session.BeginTransaction()) 
      { 
       var skus = session.CreateCriteria(typeof(SKU)).List<SKU>(); 
       foreach (var sku in skus) 
       { 
        Console.WriteLine(sku.Ptoduct); 
       } 
      } 
     } 
    } 
    private static ISessionFactory CreateSessionFactory() 
    { 
     var cfg = OracleClientConfiguration.Oracle10 
      .ConnectionString(c => 
           c.Is(
            @"DATA SOURCE=SERVER_NAME;PERSIST SECURITYINFO=True;USER ID=USER_ID;Password=PWD")); 
     return Fluently.Configure() 
      .Database(cfg).Mappings(m => m.FluentMappings.AddFromAssemblyOf<Program>()) 
      .ExposeConfiguration(BuildSchema).BuildSessionFactory(); 
    } 
    private static void BuildSchema(NHibernate.Cfg.Configuration config) 
    { 
     new SchemaExport(config).Create(false, true); 
    } 

} 

와 같은 레코드를 검색하는 매핑이 있지만 엔티티에 지정된 것보다 많은 열이 테이블에 있습니다. 이 코드는 잘 실행되지만 SKU 목록을 가져올 수 없습니다 (표에는 8000 개가 넘는 행이 있음).

문제를 이해하도록 도와주세요.

+0

코드가 제대로 실행되고 오류를 이해하는 데 도움을 요청합니까? 예외가 있습니까? 그렇다면 예외는 무엇입니까? – Jay

+0

안녕하세요 Jai, 코드가 잘 컴파일되어 있는지 확인합니다. 이것은 콘솔 응용 프로그램입니다. – Akhil

답변

2

SKU 맵이 잘못되었습니다. ID 열로 PRODUCT_NAME을 정의한 이유는 무엇입니까? 당신은 (당신이 밖으로 댓글을 달았) ID 항목에 ID 설정하여 문제를 해결해야합니다

Id(x => x.Id, "NAME_OF_YOUR_ID_COLUMN_HERE").GeneratedBy.Assigned(); 
Map(x => x.Ptoduct, "PRODUCT_NAME"); 

PRODUCT_NAME 경우 실제로 ID입니다, 당신은이처럼 설정해야합니다

Id(x => x.Ptoduct, "PRODUCT_NAME").GeneratedBy.Assigned(); 

Map(x => x.Ptoduct, "PRODUCT_NAME"); 

또한 데이터베이스에 매핑 할 필드 또는 테이블이 더 많은 경우 많은 오류가 발생할 수 있습니다. 이를 해결하려면 구성에서 use_proxy_validatorfalse으로 설정해야합니다.

EDIT :
Hibernate는 Id 컬럼이 올 Y로 작동해야합니다. Id 열로 선언 된 열이 실제로 없어도 작동하는지조차 알지 못합니다. Ptoduct을 ID 열로 선언하더라도 모든 개체에 대한 쿼리로 데이터베이스를 올바르게 쿼리 할 수 ​​없으므로 동일한 Ptoduct이 맨 위 개체를 반환합니다.

+0

안녕하세요 Yogesh, 테이블 ID 열 (즉, 식별 열 또는 자동 증가 열 말할 수 있습니다) ID를 제품에 매핑 된 및 내 지식에 따라 유창한이 (내 개체의 ID 열에 대한) 만들기 때문에 기본 키 열을 제공하여 런타임에 흐름 .. 내가 맞습니까? ??? 감사 – Akhil