2009-11-24 8 views
8

Với nguồn của tôi trong Subversion, tôi gặp sự cố khi 2 máy tính khác nhau có các chuỗi kết nối khác nhau.Quản lý các chuỗi kết nối của nhà phát triển khác nhau trong LINQ to SQL

Trình thiết kế LINQ to SQL dường như chỉ có cùng chuỗi kết nối.

Nhà thiết kế có thể sử dụng chuỗi kết nối khác nhau vì nhà phát triển có cấu hình cục bộ khác nhau, nhưng việc sử dụng thực tế trong ứng dụng web kéo từ web.config?

Trả lời

4

Thật không may, đây là một nguồn đau lớn với trình thiết kế LINQ to SQL. Tôi không biết cách để buộc studio trực quan không bao giờ thêm chuỗi kết nối mặc định khi bạn kéo bảng hoặc các thủ tục được lưu trữ lên bề mặt thiết kế.

Chúng tôi làm việc xung quanh vấn đề thusly:

  1. chúng tôi không bao giờ lưu mật khẩu dev của chúng tôi
  2. chúng tôi không bao giờ sử dụng chuỗi kết nối mặc định trong mã khi newing lên một DataContext
  3. chúng ta có thể do "an toàn" bỏ qua nhiều chuỗi kết nối trong các lần chạy nước rút chạm vào lớp dữ liệu
  4. khi mọi thứ chết đi/trở nên ổn định hơn, chúng tôi xóa các chuỗi kết nối khỏi ngữ cảnh dữ liệu, hoặc sử dụng các thuộc tính của chính thiết kế hoặc bằng cách chỉnh sửa XML. Tại thời điểm đó, nó phụ thuộc vào trình sửa đổi của bối cảnh dữ liệu để theo kịp với việc xóa các chuỗi kết nối mặc định.

Than ôi, đây không phải là một tình huống lý tưởng. Hy vọng VS2010 sẽ "khắc phục" vấn đề này.

+3

VS2010 Beta 2 chưa sửa lỗi này. – MikeD

+1

Có vẻ như VS2013 cũng chưa có sự cố này. –

1

Tôi đã gặp sự cố này và đã tìm thấy câu hỏi của bạn. Đây là giải pháp mà chúng tôi hiện đang sử dụng:

  1. Sử dụng lớp cấu hình tập trung để truy xuất các giá trị cấu hình từ một vị trí cụ thể trên hệ thống tệp. Điều này cho phép mọi máy nơi mã đang chạy để sử dụng các giá trị cấu hình riêng của nó.

  2. Tạo một lớp học một phần cho ngữ cảnh dữ liệu LINQ to SQL. Thêm một hàm tạo tùy chỉnh mà không có tham số và lấy chuỗi kết nối cơ sở dữ liệu từ lớp Cấu hình được mô tả ở trên.

Ví dụ:

public partial class MyCustomDBDataContext 
{ 
    public MyCustomDBDataContext() : 
       base(Configuration.GetDatabaseConnectionString()) 
    { 
    } 
} 

này bây giờ sẽ giải quyết vấn đề cho cả nhà phát triển và khi triển khai thử nghiệm và sản xuất.

+0

Chỉ cần cố gắng để thực hiện điều này cho dự án của tôi nhưng im nhận được lỗi "Đã định nghĩa một phương thức cho ..." bởi vì bây giờ nó có 2 khai báo của hàm tạo mặc định. – dkarzon

+0

Tôi biết đây là một bình luận cũ nhưng bất cứ điều gì ... Từ một * mở * và * tập trung * .dbml của "Properties" bảng bạn cần phải mở rộng "Kết nối" sau đó thiết lập "Cài đặt ứng dụng" để 'Sai'.Điều này sẽ loại bỏ các constructor parameterless từ designer.xml của dbml có nghĩa là constructor của bạn trong lớp partial sẽ không còn phát ra lỗi "Already defined". Một nhược điểm là nếu bạn xóa/thêm một bảng vào dbml nó sẽ thiết lập lại chuỗi kết nối và thiết lập Application Setting trở lại True. Vâng, nó rất khó chịu. –

1

Bằng cách làm theo các hướng dẫn trên How Do I? Change Connection String of datacontext default constructor from web.config ứng dụng của tôi hiện sử dụng các kết nối khác nhau tùy thuộc vào nếu HttpContext.Current.Request là địa phương hay không.

//using System.Web.Configuration; 

partial void OnCreated() 
    { 
     //Change this condition to your needs 
     var isLocal = HttpContext.Current.Request.IsLocal; 
     this.Connection.ConnectionString = WebConfigurationManager.ConnectionStrings[isLocal ? "localConnectionstring" : "otherConnectionstring"].ToString(); 
    }