2012-07-02 10 views
6

Czy można używać baz danych LocalDB z NHibernate? Jeśli tak, co należy zainstalować/skonfigurować?nHibernate i SQL Server 2012 LocalDB

Obecnie, gdy próbuje użyć ciąg połączenia jak Source = (LocalDb) \ V11.0; Initial Catalog = tst1; Integrated Security = SSPI podczas tworzenia SessionFactory uzyskać

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

Jednak ja” m stanie połączyć się z (LocalDb) \ v11.0 poprzez Explorer programu SQL Server, a Entity Framework działa z tym ciągiem połączenia. Co ja robię źle w NH, albo w danym momencie nie można używać LocalDB z NH?

+1

Być może będziesz musiał użyć archaicznej składni za pomocą nH, np. 'np: \\. \ pipe \ LOCALDB # ABB78D50 \ tsql \ query' - dla niektórych środowisk zobacz http://www.mssqltips.com/sqlservertip/2694/getting-started-with-sql-server-2012-express- localdb/ –

+0

dziękuję, to wydaje się działać, ale nie jestem całkiem zadowolony z tworzenia instancji z wiersza poleceń .. – Shaddix

+0

Następnie wywieramy nacisk na osoby nHibernate, aby zaktualizować swoje wsparcie dla SqlLocalDb. Poza tym nie powinieneś tworzyć instancji przy każdym uruchomieniu programu. Nie możesz zatrzymać i uruchomić instancji? Gdy znasz nazwę potoku, nie powinieneś robić tego ręcznie po tym ... –

Odpowiedz

2

Możecie użyć archaicznego składni z NH, np: (. Od pewnego tło na dlaczego ta składnia jest czasami konieczne dla ciągów połączeń, patrz this tip on mssqltips.com)

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

ja sobie z tego sprawy nie jest idealną odpowiedzią, ale dopóki aktualizacje nHibernate oficjalnie nie obsługują SqlLocalDb, może to być twój jedyny wybór ... mam nadzieję, że się mylę i ktoś wymyślił bardziej elegancki sposób na połączenie.

0

Upewnij się, że instalacja tej aktualizacji: http://support.microsoft.com/kb/2544514

Następnie upewnij się, że baza danych jest tworzona:

  • Eksploratorze bazy danych lub SQL Management Studio umożliwia połączenie do (localdb) \ v11 0,0
  • Run CREATE DATABASE [dbname]
  • Tworzenie tabel jeśli niezbędne

Zmień ciąg połączenia do:

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

i uruchomienie sieci. Powinno działać.

0

Używam również AttachDBFilename=|DataDirectory|\Database_name.mdf w ciągu połączenia.

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

i MyDatabase.mdf jest w App_Data katalogu aplikacji

1

Nie trzeba używać NP: \ jako ten typ połączenia ciąg jest duży ból głowy dla wszystkich. Adres potoku o nazwie localdb zmienia się często, więc musisz to uwzględnić w ciągu połączenia.

Aby użyć NHibernate z localDB, pobrać najnowszą wersję NHibernate i stosować następujące parametry połączenia:

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

Sztuką jest AttachDBFilename.

1

Tak, istnieje możliwość połączenia. Idź do Widok -> Server Explorer -> rozwiń Data Connections, a następnie kliknij prawym przyciskiem myszy i przejdź do Właściwości. Zobaczysz obszary Identity, Conenction i Misc.W obszarze Połączenie znajdziesz ciąg połączenia wymagany dla pliku .xml, w którym skonfigurowano NHibernate. Skopiuj ten ciąg pod mienia connection.string jak:

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

dodałem NHibernate do mojego projektu MVC po this postu.

Mam nadzieję, że ta pomoc.