我正在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中复制它们但没有成功。
更新
请帮帮我!我坚持这个奇怪的问题:(
答案 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错误或某种东西......