NHibernate配置问题:“找不到入口点”

时间:2012-10-18 07:41:09

标签: sharepoint mapping entry-point nhibernate-configuration

我正在SharePoint 2010 Web应用程序上配置NHibernate。 以前,当映射和域位于一个项目中时,它可以正常工作。但在重构​​过程中,我在几个项目上分解了解决方案。我还实现了我想要初始化nhibernate配置的自定义IHttpModule

    protected void context_BeginRequest(object sender, EventArgs e)
    {
        var httpApplication = sender as HttpApplication;

        lock (httpApplication )
        {
            if (!httpApplication.Context.Items.Contains(ApplicationConstants.IsApplicationInitialized))
            {
                httpApplication.Context.Items.Add(ApplicationConstants.IsApplicationInitialized, true);
                InitInRequest(httpApplication);
            }
        }

        httpApplication.Context.Items.Add(ApplicationConstants.SESSION, NhibernateManager.GetSession());
    }

    private void InitInRequest(HttpApplication httpApplication)
    {
        NhibernateManager.Init(ApplicationVariables.ApplicationSettingsPath);
    }

和NHibernateManager.Init():

    public static void Init(string configurationFilePath)
    {
        specifiedConfigurationFilePath = configurationFilePath;
        Configure();
        InitSessionFactory();
    }

    private static void Configure()
    {
        if (config == null)
        {
            if (string.IsNullOrEmpty(specifiedConfigurationFilePath) == false)
            {
                config = new Configuration();
                config = config.Configure(specifiedConfigurationFilePath);
                config = Fluently.Configure(config)
                                    .Mappings(m => m.FluentMappings.AddFromAssemblyOf<ItemMap>())
                                    .BuildConfiguration();
            }
            else
            {
                config = Fluently.Configure()
                                    .Mappings(m => m.FluentMappings.AddFromAssemblyOf<ItemMap>())
                                    .BuildConfiguration();
            }
        }
    }

在BuildConfiguration()中,我有一个非常奇怪的错误(InnerException):“找不到入口点。”堆栈跟踪显示获取映射信息是错误原因:

at System.Collections.Generic.IDictionary`2.TryGetValue(TKey key, TValue& value)
at NHibernate.Cfg.Configuration.GetClassMapping(String entityName)
at NHibernate.Cfg.Configuration.GetClassMapping(Type persistentClass)
at FluentNHibernate.PersistenceModel.Configure(Configuration cfg)
at FluentNHibernate.Cfg.MappingConfiguration.Apply(Configuration cfg)
at FluentNHibernate.Cfg.FluentConfiguration.BuildConfiguration()

所有程序集都在GAC中。我试图在_app_bin或bin中复制它们但没有成功。

更新

请帮帮我!我坚持这个奇怪的问题:(

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。

看看我的配置行:

config = new Configuration();
config = config.Configure(specifiedConfigurationFilePath);
config = Fluently.Configure(config)
                 .Mappings(m => m.FluentMappings.AddFromAssemblyOf<ItemMap>())
                 .BuildConfiguration();

我正在创建新的nhibernate配置对象,将其传递给fluent-nhibernate静态初始化方法。这是事情发生的一个方面。 Fluent-nhibernate无法从指定文件中进行配置。相反,它可以将nhibernate配置对象与指定的文件路径一起使用,然后使用它来构建配置。 我的应用程序的早期版本是在一个程序集中,这种配置方式似乎工作正常。但是,当我拆分应用程序时,问题出现了。 所以为了解决这个问题,我应该从web.config文件中获取nhibernate配置信息。我无法在单个程序集项目中将计时器作业和Web应用程序的设置合并到一个文件中。所以我必须有几个配置文件,并且总是使用这样的经典行:

Fluently
 .Configure()
  .Mappings(p => p.FluentMappings
                   .AddFromAssemblyOf<ItemMap>())
                    .BuildConfiguration()

它似乎是某种流利的nhibernate错误或某种东西......