2011-04-23 95 views
2

任何人都可以幫助我。我的目標是,始終使用相同的數據庫。通過我,它覆蓋了我所有的數據。我得到這個錯誤:創建SessionFactory時使用了無效或不完整的配置。請參閱PotentialReasons集合和InnerException以獲取更多詳細信息。NHibernate配置問題

我的代碼如下所示:

using FluentNHibernate; using NHibernate; using FluentNHibernate.Cfg; using FluentNHibernate.Cfg.Db; using FluentNHibernate.Automapping; using NHibernate.Cfg; using NHibernate.Tool.hbm2ddl; using NHibernate.Criterion; using FluentNhibernateTest; using FluentNHibernate.Mapping; using MMAdminPfyn.MappingFiles;

namespace FluentNhibernateTest { public sealed class FluentNHibernateHelper { private static ISessionFactory sessionFactory;

public static ISessionFactory GetInstance() 
    { 
     if (sessionFactory == null) 
     { 
      sessionFactory = BuildSessionFactory(); 
     } 
     return sessionFactory; 
    } 

    private static ISessionFactory BuildSessionFactory() 
    { 

     return Fluently.Configure() 
      .Database(PostgreSQLConfiguration.PostgreSQL82 
      .ConnectionString(c => c 
       .Host("localhost") 
       .Port(5432) 
       .Database("blablabla") 
       .Username("blablabla") 
       .Password("blablabla"))) 
       .Mappings(m => m.FluentMappings 
            .AddFromAssemblyOf<AdresseMap>() 
            .AddFromAssemblyOf<PersonMap>() 
            .AddFromAssemblyOf<InstitutionMap>() 
            .AddFromAssemblyOf<LiteraturMap>() 
            .AddFromAssemblyOf<KategorieMap>() 
            .AddFromAssemblyOf<MediaDateiMap>() 
         ) 
      .ExposeConfiguration(BuildSchema) 
      .BuildSessionFactory(); 
    } 

    private static void BuildSchema(Configuration config) 
    { 
     new SchemaExport(config).Create(true, 

true); } } }

+0

你是否檢查內部異常說什麼? – Linkgoron 2011-04-23 10:54:05

+0

它說我:{「無法編譯映射文檔:(XmlDocument)」} – user721654 2011-04-23 14:52:03

+0

而且:重複類/實體映射MMAdminPfyn.Objects.Audio(一個瀏覽器) – user721654 2011-04-23 14:52:47

回答

0

下看起來很奇怪:

.Mappings(m => m.FluentMappings 
            .AddFromAssemblyOf<AdresseMap>() 
            .AddFromAssemblyOf<PersonMap>() 
            .AddFromAssemblyOf<InstitutionMap>() 
            .AddFromAssemblyOf<LiteraturMap>() 
            .AddFromAssemblyOf<KategorieMap>() 
            .AddFromAssemblyOf<MediaDateiMap>() 
         ) 

做那些映射(AddressMap,PersonMap等)在不同的dll文件都存在嗎?如果他們不這樣做,你只需要這些語句中的一個,它會在該程序集中找到所有的映射。所以,你只需要以下條件:

return Fluently.Configure() 
      .Database(PostgreSQLConfiguration.PostgreSQL82 
      .ConnectionString(c => c 
       .Host("localhost") 
       .Port(5432) 
       .Database("blablabla") 
       .Username("blablabla") 
       .Password("blablabla"))) 
       .Mappings(m => m.FluentMappings 
            .AddFromAssemblyOf<AdresseMap>() 
         ) 
      .ExposeConfiguration(BuildSchema) 
      .BuildSessionFactory(); 
0

這個問題是與該位:

.Mappings(m => m.FluentMappings 
           .AddFromAssemblyOf<AdresseMap>() 
           .AddFromAssemblyOf<PersonMap>() 
           .AddFromAssemblyOf<InstitutionMap>() 
           .AddFromAssemblyOf<LiteraturMap>() 
           .AddFromAssemblyOf<KategorieMap>() 
           .AddFromAssemblyOf<MediaDateiMap>() 
        ) 

https://github.com/jagregory/fluent-nhibernate/wiki/Fluent-configuration引述

If you're in the situation where your application is exclusively using fluent mappings, then this is the configuration for you.

,這意味着你要贈送裝配其中包含類;你在這裏做什麼等於告訴Fluent,「映射包含這個類的程序集。」

var sessionFactory = Fluently.Configure() 
    .Database(SQLiteConfiguration.Standard.InMemory) 
    .Mappings(m => 
    m.FluentMappings 
     .AddFromAssemblyOf<YourEntity>()) 
    .BuildSessionFactory(); 

試試這個。

.Mappings(m => m.FluentMappings.AddFromAssemblyOf<AdresseMap>());