2012-07-02 19 views
6

È possibile utilizzare database LocalDB con NHibernate? Se sì, cosa dovrebbe essere installato/configurato?nIBernate e SQL Server 2012 LocalDB

Attualmente quando si cerca di utilizzare stringa di connessione come Data Source = (LocalDB) \ v11.0; Initial Catalog = tst1; Integrated Security = SSPI durante la creazione di SessionFactory ottengo

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

Tuttavia, I' m in grado di connettersi a (LocalDb) \ v11.0 tramite Esplora oggetti di SQL Server e Entity Framework funziona con quella stringa di connessione. Quindi, cosa sto sbagliando con NH, o è impossibile usare LocalDB con NH al momento?

+1

Potrebbe essere necessario utilizzare la sintassi arcaica con nH, ad es. 'np: \\. \ pipe \ LOCALDB # ABB78D50 \ tsql \ query' - per alcuni background vedi http://www.mssqltips.com/sqlservertip/2694/getting-started-with-sql-server-2012-express- localdb/ –

+0

grazie, sembra funzionare, ma non sono abbastanza contento di creare istanze dalla riga di comando .. – Shaddix

+0

Quindi esercitare pressioni sugli utenti di Nibernate per aggiornare il loro supporto di SqlLocalDb. Inoltre, non dovresti creare un'istanza ogni volta che avvii il tuo programma. Non puoi fermarti e avviare l'istanza? Una volta che conosci il nome del pipe, non dovresti doverlo fare tutto manualmente dopo quello ... –

risposta

2

Potrebbe essere necessario usare la sintassi arcaica con NH, ad esempio: (. Per alcuni retroscena sul perché questa sintassi a volte è necessario per le stringhe di connessione, vedere this tip on mssqltips.com)

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

Mi rendo conto che non è una risposta ideale, ma fino a quando gli aggiornamenti di nibernate non supportano ufficialmente SqlLocalDb, potrebbe essere la tua unica scelta ... speriamo di sbagliarmi e qualcuno ha trovato un modo più elegante per connettersi.

0

Assicurarsi di installare questo aggiornamento: http://support.microsoft.com/kb/2544514

quindi assicurarsi che il database viene creato:

  • Utilizzando Database Explorer o SQL Management Studio rende una connessione a (LocalDB) \ v11 0,0
  • Run CREATE DATABASE [dbname]
  • creare tabelle, se necessario,

Modifica stringa di connessione:

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

ed eseguire il web. Dovrebbe funzionare.

0

Io uso anche AttachDBFilename=|DataDirectory|\Database_name.mdf nella stringa di connessione.

<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> 

e MyDatabase.mdf è in App_Data directory dell'applicazione

1

Non è necessario utilizzare np: \ come questo tipo di stringa di connessione è un gran mal di testa per tutti. L'indirizzo della pipe denominata localdb cambia frequentemente, quindi è necessario riflettere sulla stringa di connessione.

Per utilizzare NHibernate con LocalDB, ottenere l'ultima versione di NHibernate e utilizzare la seguente stringa di connessione:

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

Il trucco è l'AttachDBFilename.

1

Sì, è possibile connettersi. Andare su Visualizza -> Esplora server -> espandere Connessioni dati, quindi fare clic con il pulsante destro del mouse su e andare su Proprietà. Vedrai le aree Identity, Conenction e Misc.Nell'area Connessione troverai la stringa di connessione necessaria per il file .xml in cui è configurato NHibernate. Copiare la stringa sotto la proprietà connection.string come:

<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> 

Ho aggiunto NHibernate al mio progetto MVC seguente this posta.

Spero che questo aiuto.

Problemi correlati