Pode consultar bancos de dados diferentes no mesmo servidor usando 1 NHibernate Sessão?

StackOverflow https://stackoverflow.com/questions/56589

  •  09-06-2019
  •  | 
  •  

Pergunta

Uma nova SessionFactory e Session o objeto tem que ser criado para cada banco de dados?Eu tenho um arquivo de dados para a aplicação de dados, e um armazenamento de dados separado para o meu funcionário de segurança, que é usado para validar os usuários.Eu tenho que criar um novo SessionFactory ans objeto de Sessão para chamadas para as 2 bases de dados diferentes?

Foi útil?

Solução

ok, então esta não responder sua pergunta diretamente, mas pode oferecer um insight sobre o porquê você deve criar vários objetos de sessão para cada arquivo de dados.

Este artigo explica como você pode implementar uma thread-safe preguiçoso singleton para cada tipo de Sessão que você precisa para que você tenha apenas uma sessão por armazenamento de dados, mas é compartilhado em toda a aplicação.Então, no mais você só vai ter 2 objetos de sessão.

Diretamente resposta a sua pergunta, no entanto, você vai precisar de 1 sessão por objeto de banco de dados.

Outras dicas

Caso geral

O caso geral a resposta é não, você precisa de pelo menos sessões diferentes para o caso geral.

Você pode usar uma única sessão de fábrica usando o OpenSession sobrecarga tendo uma conexão aberta como argumento, permitindo que você troque de banco de dados para a sessão necessidade de ti.

Isso tem algumas desvantagens, como a falta de ligação de auto-liberação após a transações, a desativação do cache de segundo nível, ...Melhor ter dois sessão de fábricas na minha opinião, em vez de suprir a sua própria conexão na sessão de abertura.

Banco de dados de casos específicos

Dependendo do servidor de banco de dados que você usa, você pode ser capaz de usar uma única seqüência de caracteres de conexão para acesso tanto com o NHibernate.Se você pode usar uma única seqüência de caracteres de conexão e, em seguida, você pode usar uma única sessão de fábrica e usar a mesma sessão para aceder à sua entidades dividido entre dois bancos de dados.

Caso mais simples

Usando o SQL Server, você pode ter os dois bancos de dados no mesmo SQL Server.Em tal caso, você pode usar uma única seqüência de caracteres de conexão e ajuste do catalog atributo no seu <class> mapeamentos para dizer em qual banco de dados a tabela é para ser encontrado.(schema pode ser usado também, acrescentando-se um ponto.Ele está disponível em NHibernate, desde a mais, assim, com uma versão antiga, você pode ter apenas schema.)

Claro, as credenciais de conexão deve ser válida para aceder a bases de dados.

Outros casos

Ainda usando o SQL Server, se o segundo banco de dados está em outro servidor, você pode usar um servidor vinculado.Você gostaria de ajustar novamente o catalog o atributo de classes que precisam para especificar o adequado linkedServerName.DbName.

Talvez outros bancos de dados podem ter soluções similares.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top