2012-09-04 38 views
7

Tôi đang sử dụng EF 4.3 với một cách tiếp cận đầu tiên Mã.Entity Framework cơ sở dữ liệu đầu tiên 4.3 đang đặt tên

Với EF 4.3, bạn nên sử dụng phần cấu hình mới <entityFramework /> để khởi tạo chuỗi kết nối cho ngữ cảnh.

Tôi đã thực hiện một số tìm kiếm trực tuyến và tôi dường như không thể tìm cách thuận tiện để sử dụng phương pháp này để khởi tạo kết nối với tên cơ sở dữ liệu có thể định cấu hình.

Ví dụ: giả sử tôi có một thực thể MyDBContext trong đơn đăng ký của mình. Tôi muốn sử dụng tên cơ sở dữ liệu được chỉ định trong chuỗi kết nối từ Initial Catalog=MyDB;

Sử dụng phương pháp cũ từ EF 4.1, tôi có thể làm điều này bằng cách thêm chuỗi kết nối vào phần <connectionstring> trong tệp cấu hình.

<add name="MyDBContext" connectionString="Data Source=.\SQLEXPRESS; Initial Catalog=MyDB; Integrated Security=True; MultipleActiveResultSets=True" providerName="System.Data.SqlClient"/> 

Nếu tôi muốn sử dụng cấu hình mới hơn mà EF 4.3 hỗ trợ, tôi không có cách nào để chỉ định tên cơ sở dữ liệu trong chuỗi kết nối. Tôi đã thử những điều sau nhưng thuộc tính Initial Catalog bị bỏ qua. Tôi tin rằng nó sẽ bị bỏ qua vì lý do tốt, bởi vì toàn bộ điều là một DefaultConnectionFactory mà có thể được sử dụng bởi nhiều bối cảnh trong ứng dụng của tôi

<entityFramework> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework"> 
     <parameters> 
      <parameter value="Data Source=.\SQLEXPRESS; Initial Catalog=MyDB; Integrated Security=True; MultipleActiveResultSets=True" /> 
     </parameters> 
    </defaultConnectionFactory> 
</entityFramework> 

Giá trị mặc định tên DB rằng cách tiếp cận codefirst tôi tạo ra như là kết quả của việc sử dụng này là MyNamespace.MyDBContext

Tôi hiểu rằng có một cách để ghi đè tên đặt mặc định này bằng cách chuyển giá trị đến đối số nameOrConnectionString trên đối tượng cơ sở DBContext.

Vì vậy, tôi có thể làm một cái gì đó như thế này:

public MyDBContext() : base("MyDB") { } 

Tuy nhiên, nếu tôi áp dụng cách này tôi kết thúc hardcoding tên DB vào ứng dụng của tôi và cá nhân tôi không thích điều này.

Tôi tự hỏi có cách nào để tôi có thể chuyển tên cơ sở dữ liệu cho ngữ cảnh DB của mình một cách thuận tiện từ tệp Web.config hay tôi chỉ cần tiếp tục sử dụng phần <connectionstrings>?

Trả lời

0

Bạn có thường xuyên nghĩ tên cơ sở dữ liệu sẽ phải thay đổi không?

Điều đó nói rằng, tôi chưa tự mình gặp phải vấn đề này (tôi không thể thay đổi tên cơ sở dữ liệu) - một tùy chọn có thể lưu trữ tên cơ sở dữ liệu bạn muốn trong Web.config như một cài đặt ứng dụng, và sau đó có mã của bạn kéo giá trị từ đó.

EDIT: Bạn cũng có thể muốn có một cái nhìn tại http://blogs.msdn.com/b/adonet/archive/2011/01/27/using-dbcontext-in-ef-feature-ctp5-part-2-connections-and-models.aspx:

public UnicornsContext() 
    : base("name=UnicornsCEDatabase") 
{ 
} 

Cùng với đó kéo chuỗi kết nối với cái tên đặc biệt:

<configuration> 
<connectionStrings> 
    <add name="UnicornsCEDatabase" 
     providerName="System.Data.SqlServerCe.4.0" 
     connectionString="Data Source=Unicorns.sdf"/> 
</connectionStrings> 
</configuration> 

Theo http://blogs.msdn.com/b/adonet/archive/2012/01/12/ef-4-3-configuration-file-settings.aspx này vẫn phải làm việc trong 4.3.

+1

Nói chung tôi không mong đợi tên DB thay đổi. Nhưng có thể có trường hợp tên DB có thể va chạm với một tên DB khác trên cùng một SQL Instance.Cũng có trường hợp nếu tôi muốn chạy nhiều hơn một cá thể của cùng một ứng dụng trên cùng một SQL Instance, nó không thể được thực hiện mà không biên dịch lại ứng dụng và thay đổi tên DB. Không lý tưởng. –

+0

Sau đó, tôi sẽ nói hãy xem một trong hai tùy chọn ở trên. Cá nhân, có vẻ như ý tưởng blog của ADO.NET sẽ là lựa chọn tốt nhất của cả hai. –

+0

Cảm ơn, tôi đoán tôi sẽ gắn bó với khóa chuỗi kết nối trong tệp Web.config theo bài viết được tham chiếu. –

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