2009-07-27 27 views
13

Tôi cần đặt chuỗi kết nối của mình cho LINQ thành Sql dựa trên biến môi trường. Tôi có một hàm sẽ trả về chuỗi kết nối từ web.config dựa trên biến môi trường, nhưng làm cách nào để Linq luôn sử dụng chuỗi kết nối "được tạo động" này (tốt nhất là không phải chỉ định nó mỗi lần)?LINQ to Sql - Đặt chuỗi kết nối động dựa trên biến môi trường

Tôi biết tôi có thể chỉ định chuỗi kết nối bằng cách sử dụng hàm tạo, nhưng cách thức hoạt động khi sử dụng datacontext trong một LinqDataSource?

Trả lời

18

Sử dụng:

MyDataClassesDataContext db = new MyDataClassesDataContext(dynamicConnString); 

Đối với một LinqDataSource, ngăn chặn sự kiện ContextCreating và tạo DataContext bằng tay như trên:

protected void LinqDataSource_ContextCreating(object sender, LinqDataSourceContextEventArgs e) 
{ 
    e.ObjectInstance = new MyDataClassesDataContext (dynamicConnString); 
} 

Từ MSDN:

Theo mặc định, LinqDataSource kiểm soát tạo một phiên bản loại được chỉ định trong thuộc tính ContextTypeName . Điều khiển LinqDataSource gọi hàm tạo mặc định của đối tượng bối cảnh dữ liệu để tạo một đối tượng của đối tượng. Có thể rằng bạn phải sử dụng hàm tạo không mặc định hoặc bạn phải tạo đối tượng khác với đối tượng được chỉ định trong thuộc tính ContextTypeName . Trong trường hợp đó, bạn phải xử lý sự kiện ContextCreating và tạo ngữ cảnh dữ liệu theo cách thủ công đối tượng.

+0

Tính năng này có hoạt động khi sử dụng DataContext với một LinqDataSource không? ví dụ, làm thế nào tôi sẽ thiết lập chuỗi kết nối ở đây: Ryan

+0

có thể, vâng. Đã chỉnh sửa. – JoshJordan

2
+0

Tính năng này có hoạt động khi sử dụng DataContext với LinqDataSource không? ví dụ, làm thế nào tôi sẽ thiết lập chuỗi kết nối ở đây: Ryan

+0

Có - như Josh đã giải thích. Bạn nên xác định điều này trong câu hỏi ban đầu của bạn. – RichardOD

1

bạn có thể thay đổi chuỗi kết nối tự động nếu bạn sẽ thực hiện OnCreated() chức năng. Chức năng này là một phần chức năng và nó có thể được thực hiện trong tập tin riêng biệt khác hơn nơi bạn dbml tồn tại.

để xem chi tiết xin vui lòng xem bài viết này

http://aspilham.blogspot.com/2011/01/how-do-i-set-connection-string-in-linq.html

6
  • Mở LINQ to SQL designer, và mở tab Properties của nhà thiết kế (schema chính nó), mở rộng kết nối và thiết lập Application Settings để False. Tiết kiệm.

  • Đóng cửa sổ đó và mở tệp thiết kế DataContext của bạn (dbml_name.designer.cs) và thay đổi hàm tạo DataContext. Bạn sẽ ngay lập tức nhận thấy chuỗi kết nối của bạn đã quyết định nhảy vào đây khi bạn tắt cài đặt ứng dụng rộng như thế nào. Vì vậy, một phần để tập trung vào đây là thay đổi các thừa kế base(). Đổi tên ConnString ”dưới đây cho phù hợp với của riêng bạn. Tôi cũng nhận thấy một số DatabaseAttribute trên lớp mà tôi không nghĩ đóng vai trò lớn và có bất kỳ tác động nào đến cài đặt kết nối.Bạn cũng sẽ cần một tham chiếu đến System.Configuration:

    công dbDataContext(): base (. ConfigurationManager.ConnectionStrings [ "MyConnString"] ConnectionString, mappingSource)

  • Mở App.config hoặc Web.config đặc trưng trong dự án nơi LINQ của bạn cho các lớp SQL cư trú và đổi tên chuỗi kết nối thành những gì bạn đã xác định là “MyConnString“.

  • Bây giờ bạn phải cắt toàn bộ mục nhập bằng thay đổi tên và dán vào hoặc App.config hoặc Web.config của ứng dụng để truy cập dữ liệu, chẳng hạn như ứng dụng web, Silverlight, WPF, WCF vv. rằng bạn thay đổi tệp cấu hình của ứng dụng gọi điện để truy cập dữ liệu, như được định nghĩa trong các lớp LINQ to SQL của bạn sẽ tìm kiếm tệp .config từ nơi ứng dụng gọi đang thực thi từ đó, cho dù các lớp LINQ to SQL của bạn ở đâu đã được xác định. Như bạn có thể thấy, nó hoạt động hơi khác so với trước đây.

  • Bây giờ Nhấp chuột phải và mở Thuộc tính trên DAL hoặc dự án có chứa các lớp LINQ to SQL của bạn và xóa chuỗi kết nối Tham chiếu “Thiết lập ứng dụng” trên tab Cài đặt.

  • Tạo lại. Bạn đã hoàn tất, bây giờ chỉ cần thực hiện kiểm tra Tìm kiếm tệp có lẽ tên cơ sở dữ liệu mà bạn biết đã được đưa vào chuỗi kết nối để kiểm tra xem có bất kỳ stragglers nào không, không nên có bất kỳ tên nào.

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