2011-01-13 88 views
0

我定義爲流利,NHibernate的:沒有得到記錄

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"); 
     } 
    } 

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

和映射實體和檢索的記錄,像

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 2011-01-13 14:44:14

+0

嗨Jai,我確信代碼編譯良好。這是一個控制檯應用程序。 – Akhil 2011-01-15 06:10:08

回答

2

您的SKU地圖是錯誤的。你爲什麼將PRODUCT_NAME定義爲Id列?你需要通過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_validator設置爲false

編輯:
的NHibernate需要一個ID列才能正常工作。我甚至不知道如果它確實有效,而沒有將列聲明爲Id列。即使你聲明Ptoduct作爲一個ID列,您將無法正常查詢數據庫查詢任何對象都具有相同Ptoduct將返回最頂層的對象。