2011-04-23 100 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>());