2012-07-02 23 views
6

¿Es posible utilizar bases de datos LocalDB con NHibernate? En caso afirmativo, ¿qué debería instalarse/configurarse?nHibernate y SQL Server 2012 LocalDB

Actualmente cuando se trata de utilizar la cadena de conexión como Data Source = (LocalDB) \ v11.0; Initial Catalog = tst1; Integrated Security = SSPI al crear SessionFactory me sale

System.Data.SqlClient.SqlException : A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server) ----> System.ComponentModel.Win32Exception : The network path was not found

Sin embargo, I' Puede conectarse a (LocalDb) \ v11.0 mediante el Explorador de objetos de SQL Server y Entity Framework funciona con esa cadena de conexión. Entonces, ¿qué estoy haciendo mal con NH, o es imposible utilizar LocalDB con NH en este momento?

+1

Puede que tenga que usar la sintaxis arcaica con nH, p. Ej. 'np: \\. \ pipe \ LOCALDB # ABB78D50 \ tsql \ query' - para algunos antecedentes, consulte http://www.mssqltips.com/sqlservertip/2694/getting-started-with-sql-server-2012-express- localdb/ –

+0

gracias, parece funcionar, pero no estoy del todo contento con la creación de instancias desde la línea de comandos. – Shaddix

+0

Luego presione a la gente de nHibernate para que actualice su compatibilidad con SqlLocalDb. Además, no debería crear una instancia cada vez que inicie su programa. ¿No puedes parar y comenzar la instancia? Una vez que conozca el nombre de la tubería no tendrá que hacerlo todo manualmente después de eso ... –

Respuesta

2

Puede que tenga que utilizar la sintaxis arcaica con nH, por ejemplo: (. Para algunos antecedentes sobre por qué esta sintaxis es a veces necesario para las cadenas de conexión, consulte this tip on mssqltips.com)

np:\\.\pipe\LOCALDB#ABB78D50\tsql\query 

Me di cuenta de esto no es una respuesta ideal, pero hasta que las actualizaciones de nHibernate sean compatibles oficialmente con SqlLocalDb, podría ser tu única opción ... espero estar equivocado y alguien haya descubierto una forma más elegante de conectarse.

0

Asegúrese de que instala esta actualización: http://support.microsoft.com/kb/2544514

A continuación, asegúrese de que se crea la base de datos:

  • Con el Explorador de base de datos o SQL Server Management Studio hace una conexión a (LocalDB) \ v11 0.0
  • Run CREATE DATABASE [dbname]
  • crear tablas si es necesario

Cambio cadena de conexión a:

Data Source=(LocalDb)\v11.0;Initial Catalog=dbname;Integrated Security=true

y ejecutar la web. Deberia de funcionar.

0

Uso también AttachDBFilename=|DataDirectory|\Database_name.mdf en la cadena de conexión.

<configSections> 
    <section name="hibernate-configuration" type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate" /> 
</configSections> 
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"> 
    <session-factory name=""> 
    <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property> 
    <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property> 
    <property name="connection.connection_string_name">LocalDb</property> 
    <property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property> 
    </session-factory> 
</hibernate-configuration> 
<connectionStrings> 
    <add name="LocalDb" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=MyDatabase;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\MyDatabase.mdf" providerName="System.Data.SqlClient" /> 
</connectionStrings> 

y MyDatabase.mdf está en App_Data directorio de la aplicación

1

No es necesario utilizar np: \ ya que este tipo de cadena de conexión es un gran dolor de cabeza para todos. La dirección de la tubería con nombre localdb cambia con frecuencia, por lo que debe reflejar eso en su cadena de conexión.

Para usar NHibernate con LocalDB, obtener la última versión de NHibernate y utilizar la siguiente cadena de conexión:

Server=(localdb)\v11.0;Initial Catalog=<dbname>;User ID=<user>;password=<pwd>;Integrated Security=false;AttachDBFilename=<dbfile_path><dbfilename>.mdf 

El truco es el AttachDBFileName.

1

Sí, se puede conectar. Vaya a Ver -> Explorador del servidor -> expanda Conexiones de datos, luego haga clic derecho en su y vaya a Propiedades. Verá las áreas Identidad, Concepción y Misc.En el área de conexión, encontrará la cadena de conexión necesaria para el archivo .xml donde NHibernate está configurado. Copiar esa cadena bajo la propiedad connection.string como:

<property name="connection.connection_string">Data Source=(LocalDb)\v11.0;AttachDbFilename={path}\aspnet-{projectName}-20141201132517.mdf;Initial Catalog=aspnet-{projectName}-20141201132517;Integrated Security=True</property> 

He añadido NHibernate a mi proyecto MVC siguiente this puesto.

Espero que esta ayuda.

Cuestiones relacionadas