2012-05-09 41 views
10

Tôi có một số cơ sở dữ liệu, lược đồ của chúng giống nhau. Khi tôi sử dụng cơ sở dữ liệu đầu tiên, chuỗi kết nối được chỉ định khi tôi tạo tệp edmx. Tôi muốn biết, có cách nào để thay đổi chuỗi kết nối không? Đây là, vì vậy tôi có thể chọn cơ sở dữ liệu để hoạt động. Thx trước!Có cách nào để thay đổi chuỗi kết nối trong cơ sở dữ liệu trước không?

Trả lời

4

Thay đổi chuỗi kết nối trong tệp web.config.

<connectionStrings> 
    <add name="SandBoxEntities" connectionString="metadata=r... /> 
    </connectionStrings> 

Tôi viết tắt chuỗi kết nối thực tế vì nó không quan trọng - chỉ muốn cung cấp cho bạn ý tưởng về những gì cần tìm trong tệp web.config.

Bạn cũng có thể thay đổi chuỗi kết nối theo cách lập trình. Hãy xem Example 16.2. Programmatically modifying an EntityConnectionString.

+0

tôi biết làm thế nào để thiết lập chuỗi kết nối trong web.config, những gì tôi muốn biết là làm thế nào để thay đổi nó trong thời gian chạy, đây là, vì vậy tôi có thể chọn cơ sở dữ liệu để sử dụng. Chuỗi kết nối đã được thiết lập khi tôi tạo tệp edmx, có cách nào để thay đổi nó khi chạy không? – James

+0

OK - Tôi đã chỉnh sửa câu trả lời của mình và cung cấp cho bạn liên kết cho bạn thấy chính xác cách thực hiện điều đó. –

+0

Câu hỏi và câu trả lời này đặt toàn bộ nội dung vào một nutshell thuận tiện: http://stackoverflow.com/questions/14440698/setup-entity-framework-for-dynamic-connection-string. –

22

Chúng tôi không lưu trữ chuỗi kết nối trong web.configs của chúng tôi, vì vậy giải pháp được chấp nhận sẽ không hoạt động đối với chúng tôi. Nếu bạn chỉ đơn giản là cố gắng để cung cấp các chuỗi kết nối thông qua các cơ sở DbContext constructor, bạn sẽ nhận được ngoại lệ sau đây:

Mã được tạo ra bằng cách sử dụng các mẫu T4 cho cơ sở dữ liệu phát triển đầu tiên và mẫu đầu tiên có thể không hoạt động chính xác nếu được sử dụng trong Bộ luật Chế độ đầu tiên. Để tiếp tục sử dụng Database First hoặc Model First, hãy đảm bảo rằng chuỗi kết nối Entity Framework được chỉ định trong tệp cấu hình của ứng dụng thực hiện. Để sử dụng các lớp này, được tạo ra từ Database First hoặc Model First, với Code First thêm bất kỳ cấu hình bổ sung nào bằng cách sử dụng các thuộc tính hoặc API DbModelBuilder và sau đó loại bỏ mã mà ném ngoại lệ này.

Để giải quyết điều này, tạo một lớp học phần của ngữ cảnh của bạn như sau và định dạng chuỗi kết nối của bạn với các siêu dữ liệu EF bổ sung (nơi MyContext là bối cảnh tên model của bạn (ví dụ như tên mô hình của bạn là MyModel.edmx, hơn các MyContext trong mã dưới đây được thay thế bằng MyModel với cả ba phần mở rộng .csdl, .ssdl, .msl sử dụng)):

public partial class MyContext 
{ 
    public MyContext(string connStr) 
     : base(string.Format(@"metadata=res://*/MyContext.csdl|res://*/MyContext.ssdl|res://*/MyContext.msl;provider=System.Data.SqlClient;provider connection string='{0}'", connStr)) 
    { 
    } 
} 
+1

Để thực hiện công việc này cho tôi, tôi cần thay đổi " thành một trích dẫn duy nhất như được mô tả trong câu trả lời này: http://stackoverflow.com/a/7004173/994464 – Brenton

+0

Đơn giản và đơn giản. –

1

bạn có thể xác định nhiều chuỗi kết nối trong web.config và sau đó sử dụng chúng trong mã của bạn có lẽ công việc của bạn. ví dụ: `

<connectionStrings> 
    <add name="conStr1" connectionString="metadata=r... /> 
</connectionStrings>` 

<connectionStrings> 
    <add name="conStr2" connectionString="metadata=r... /> 
</connectionStrings>` 

và vân vân

và bối cảnh lớp constructor của bạn có được tên chuỗi kết nối như tham số:

public MyContext(string connStr) 
    : base(connStr) { } 

Ok. bây giờ bạn có thể sử dụng trong mã của bạn như sau:

using (var db = new MyContext("name=conStr1")) 
{ 
    //your code here 
} 

và sau đó

using (var db = new MyContext("name=conStr2")) 
{ 
    //your code here 
} 
Các vấn đề liên quan