2010-01-01 53 views
5

我定義了一個簡單的錯誤類:沒有留存用於實體

using System; 

namespace BugNS.Entities 
{ 
    class Bug 
    { 
     public virtual int Id { get; private set; } 
     public virtual int BugNumber { get; set; } 
    } 
} 

和一個簡單的映射器類:

using System; 
using FluentNHibernate.Mapping; 
using BugNS.Entities; 

namespace BugNS.Mappings 
{ 
    class BugMap : ClassMap<Bug> 
    { 
     public BugMap() 
     { 
      Id(b => b.Id); 
      Map(b => b.BugNumber); 
     } 
    } 
} 

,然後就嘗試用它喜歡:

using System; 
using System.IO; 
using FluentNHibernate.Cfg; 
using FluentNHibernate.Cfg.Db; 
using NHibernate; 
using NHibernate.Cfg; 
using NHibernate.Tool.hbm2ddl; 
using BugNS.Entities; 

namespace BugNS 
{ 
    class Program 
    { 
     private const string DbFile = "bugs.db"; 

     static void Main() 
     { 
      var sessionFactory = CreateSessionFactory(); 
      using (var session = sessionFactory.OpenSession()) 
      { 
       using (var transaction = session.BeginTransaction()) 
       { 
        Bug b = new Bug { BugNumber = 121212 }; 
        session.SaveOrUpdate(b); 
        transaction.Commit(); 
       } 
      } 
     } 

     private static ISessionFactory CreateSessionFactory() 
     { 
      return Fluently.Configure() 
       .Database(SQLiteConfiguration.Standard 
        .UsingFile(DbFile)) 
       .Mappings(m => 
        m.FluentMappings.AddFromAssemblyOf<Program>()) 
       .ExposeConfiguration(BuildSchema) 
       .BuildSessionFactory(); 
     } 

     private static void BuildSchema(Configuration config) 
     { 
      // delete the existing db on each run 
      if (File.Exists(DbFile)) 
       File.Delete(DbFile); 

      // this NHibernate tool takes a configuration (with mapping info in) 
      // and exports a database schema from it 
      new SchemaExport(config) 
       .Create(false, true); 
     } 
    } 
} 

我得到以下錯誤:

An unhandled exception of type 'NHibernate.MappingException' occurred in NHibernate.dll

Additional information: No persister for: BugNS.Entities.Bug

我很抱歉,但我剛開始從文檔學習Fluent和NHibernate。如果有人知道這個問題的解決方案,那將是非常好的,因爲我已經花了很多時間徒勞了。

回答

7

該級別的訪問級別需要爲public供流利使用。

嘗試以下操作:

public class Bug 
{ 
    public virtual int Id { get; private set; } 
    public virtual int BugNumber { get; set; } 
} 

public class BugMap : ClassMap<Bug> 
{ 
    public BugMap() 
    { 
     Id(b => b.Id); 
     Map(b => b.BugNumber); 
    } 
} 

這是我的一個疑難雜症,以及當我開始用流利。

另外一件一般出錯的是缺少virtual關鍵字,這是NHibernate對這些屬性進行更改所需的關鍵字。它很好,你讓那部分正確:)

希望有幫助。

謝謝

+1

非常感謝,Visual Studio默認創建了私有類,並且沒有提到創建公共類的地方。這種簡單的錯誤需要花費很多時間。 – 2010-01-02 05:39:35

2

您需要公開Bug和BugMap類,以便NHibernate/Fluent NHibernate可以看到它們。

相關問題