2012-07-02 41 views
6

Có thể sử dụng cơ sở dữ liệu LocalDB với NHibernate không? Nếu có, những gì cần được cài đặt/cấu hình?nHibernate và SQL Server 2012 LocalDB

Hiện nay khi cố gắng sử dụng chuỗi kết nối như Data Source = (LocalDb) \ v11.0; Initial Catalog = tst1; Integrated Security = SSPI khi tạo SessionFactory tôi nhận được

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

Tuy nhiên, tôi m có thể kết nối với (LocalDb) \ v11.0 thông qua SQL Server Object Explorer và Entity Framework làm việc với chuỗi kết nối đó. Vì vậy, tôi đang làm gì sai với NH, hoặc nó không thể sử dụng LocalDB với NH vào lúc này?

+1

Bạn có thể phải sử dụng cú pháp cổ với nH, ví dụ: 'np: \\. \ pipe \ LOCALDB # ABB78D50 \ tsql \ query' - đối với một số nền, hãy xem http://www.mssqltips.com/sqlservertip/2694/getting-started-with-sql-server-2012-express- localdb/ –

+0

cảm ơn, có vẻ như làm việc, nhưng tôi không hoàn toàn hài lòng với việc tạo các thể hiện từ dòng lệnh .. – Shaddix

+0

Sau đó, áp lực các nHibernate folks để cập nhật hỗ trợ của họ về SqlLocalDb. Ngoài ra, bạn không nên tạo một cá thể mỗi khi bạn khởi động chương trình của mình. Bạn không thể dừng lại và bắt đầu ví dụ? Một khi bạn biết tên ống bạn không cần phải làm tất cả bằng tay sau đó ... –

Trả lời

2

Bạn có thể phải sử dụng cú pháp cổ xưa với nH, ví dụ như: (. Đối với một số nền tảng về lý do tại sao cú pháp này đôi khi được yêu cầu cho các chuỗi kết nối, xem this tip on mssqltips.com)

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

Tôi nhận ra điều này không phải là một câu trả lời lý tưởng, nhưng cho đến khi cập nhật nHibernate chính thức hỗ trợ SqlLocalDb, nó có thể là lựa chọn duy nhất của bạn ... hy vọng tôi sai và ai đó đã tìm ra một cách thanh lịch hơn để kết nối.

0

Hãy chắc chắn rằng bạn cài đặt bản cập nhật này: http://support.microsoft.com/kb/2544514

Sau đó, hãy chắc chắn rằng cơ sở dữ liệu được tạo ra:

  • Sử dụng Database Explorer hoặc SQL Management Studio làm cho một kết nối đến (localdb) \ v11 .0
  • Chạy CREATE DATABASE [dbname]
  • Tạo bảng nếu cần

Thay đổi chuỗi kết nối đến:

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

Và chạy web. Nó sẽ hoạt động.

0

Tôi cũng sử dụng AttachDBFilename=|DataDirectory|\Database_name.mdf trong chuỗi kết nối.

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

MyDatabase.mdf là trong App_Data thư mục của ứng dụng

1

Bạn không cần phải sử dụng np: \ as type này của chuỗi kết nối là một nhức đầu lớn cho tất cả. Địa chỉ của localdb tên là thay đổi thường xuyên, do đó bạn phải phản ánh điều đó trên chuỗi kết nối của bạn.

Để sử dụng NHibernate với localDB, có được phiên bản mới nhất của NHibernate và sử dụng chuỗi kết nối sau đây:

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

Bí quyết là AttachDBFilename.

1

Có, bạn có thể kết nối. Vào View -> Server Explorer -> mở rộng Data Connections, sau đó kích chuột phải vào nó và vào Properties. Bạn sẽ thấy các khu vực Nhận dạng, Conenction và Misc.Trong khu vực kết nối, bạn sẽ tìm thấy chuỗi kết nối cần thiết cho tệp .xml nơi NHibernate được cấu hình. Sao chép chuỗi đó trong thuộc tính connection.string như:

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

Tôi đã thêm NHibernate vào dự án MVC sau this bài đăng.

Hy vọng trợ giúp này.

Các vấn đề liên quan