NHibernate配置问题

时间:2011-04-23 10:35:53

标签: asp.net configuration fluent-nhibernate

任何人都可以帮助我。我的目标是,始终使用相同的数据库。通过我,它覆盖了我的所有数据。我收到此错误:创建SessionFactory时使用了无效或不完整的配置。检查PotentialReasons集合,以及InnerException以获取更多详细信息。

我的代码如下:

  

使用FluentNHibernate;运用   NHibernate的;运用   FluentNHibernate.Cfg;运用   FluentNHibernate.Cfg.Db;运用   FluentNHibernate.Automapping;运用   NHibernate.Cfg;运用   NHibernate.Tool.hbm2ddl;运用   NHibernate.Criterion;运用   FluentNhibernateTest;运用   FluentNHibernate.Mapping;运用   MMAdminPfyn.MappingFiles;

     

namespace FluentNhibernateTest {       公共密封类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);           }       }}

2 个答案:

答案 0 :(得分: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();

答案 1 :(得分: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

  

如果您处于申请专用的情况   流畅的映射,然后这是你的配置。

这意味着您要提供包含类的程序集;你在这里所做的就等于告诉Fluent,“映射包含这个类的程序集。”

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

试试这个。

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