我正在尝试通过http://codeinsanity.com的指导将http://codeinsanity.com和NH连接到多个数据库(参见“配置NCommon以获得多个数据库支持”),它通过所建议的fluent方法工作,如下所示:
var configuration = NCommon.Configure.Using(adapter).ConfigureState<DefaultStateConfiguration>();
configuration.ConfigureData<NHConfiguration>(config => config.WithSessionFactory(() => _sessionFactories[0]).WithSessionFactory(() => _sessionFactories[1]));这与预期的一样工作,但正如您所看到的,sessionFactories是硬编码的。我真正想做的是这样的事情:
foreach(ISessionFactory sessionFactory in _sessionFactories)
{
configuration.ConfigureData<NHConfiguration>(config => config.WithSessionFactory(() => sessionFactory));
}但这会引发以下异常:
无法注册组件NCommon.Data.NHibernate.NHUnitOfWorkFactory。已经有一个具有该名称的组件。您想修改现有的组件吗?如果没有,请确保指定了唯一的名称。
我希望有一种正确的方法,不用硬编码就能连接n个SessionFactories-但我只是没有看到解决方案。有什么建议吗?
发布于 2012-05-30 17:59:10
我认为,通过将SessionFactory部分委托给一个方法,我可以做到这一点,如下所示:
configuration.ConfigureData<NHConfiguration>(config => ConfigureSessionFactories(config));
private void ConfigureSessionFactories(NHConfiguration configuration)
{
foreach (ISessionFactory sessionFactory in _sessionFactories)
{
configuration.WithSessionFactory(() => sessionFactory);
}
}然而,这似乎只是一个解决办法。假设您有多个会话工厂,您可以使用它们来查询,但是只有最后添加的会话工厂才会访问数据库并返回结果。对其他会话工厂的查询永远不会击中实际的数据库,并且将返回零个实体。
我唯一能让这件事成功的方法是:
configuration.ConfigureData<NHConfiguration>(config => config.WithSessionFactory(() => _sessionFactories[0]).WithSessionFactory(() => _sessionFactories[1]));不过,我不想硬编码.我宁愿在n-会话工厂的循环中迭代.有谁知道如何做到这一点吗?
https://stackoverflow.com/questions/10821590
复制相似问题