8

Tôi đang di chuyển một ứng dụng web hiện có (sử dụng Entity Framework 5) sang vai trò Web Azure.Khuôn khổ thực thể DbContext trong vai trò Web Azure

Chuỗi kết nối cơ sở dữ liệu đang được di chuyển từ web.config đến tệp ServiceConfiguration.*.cscfg.

Vấn đề là trong tự động tạo raModel.Context.cs tập tin, lớp thực thể của tôi được định nghĩa như thế này:

public partial class MyEntities : DbContext 
{ 
    public MyEntities() 
     : base("name=MyEntities") 
    { } 

    // DbSets, etc 
} 

này sẽ luôn luôn tìm kiếm MyEntities trong web.config. Làm thế nào tôi có thể ghi đè lên constructor này để tôi có thể vượt qua trong chuỗi kết nối từ các tập tin ServiceConfiguration.*.cscfg?

tôi có thể lấy được từ lớp học này, như vậy:

public class MyCloudEntities : MyEntities 
{ 
    public MyCloudEntities() 
     : base(CloudConfigurationManager.GetSetting("MyEntities")) 
    { } 
} 

Nhưng sau đó tôi phải thay đổi mỗi instantiation của MyEntities trong cơ sở mã, và nó sẽ không ngăn chặn các nhà phát triển từ việc sử dụng MyEntities trong tương lai.

+0

Tại sao bạn muốn lưu trữ chuỗi kết nối trong tệp cấu hình Azure? Bạn có bao giờ cần thay đổi chuỗi kết nối khi chạy không? – Fore

+2

Không, nhưng chuỗi kết nối khác nhau theo môi trường. – davenewza

Trả lời

7

Bạn có thể thay đổi tập tin Model.Context.tt, sử dụng

CloudConfigurationManager.GetSetting("MyEntities") 

ở vị trí của

"name=MyEntities" 

cho MyEntities

Vì vậy, mỗi lần khi bối cảnh sẽ được tái tạo, bạn sẽ luôn có những thay đổi. Trong trường hợp này, bạn không cần thay đổi gì khác.

+0

Tôi sẽ thay đổi điều này ở đâu? Tôi không thể thay đổi tệp ngữ cảnh vì nó được tạo tự động. Cảm ơn câu trả lời. – davenewza

+1

Phải, bạn không thể thay đổi tệp ngữ cảnh (Model.Context.cs) vì tệp này sẽ được tạo lại, nhưng tệp đó được tạo từ tệp mẫu (Model.Context.tt). Bạn cần mở tệp Model.Context.tt đó dưới dạng tệp văn bản thuần túy (VS chỉ hoạt động hoàn hảo cho điều đó) và tìm vị trí bằng 'base (" name = <# = container.Name #> ")', sau đó chỉ cần thay đổi nó tới 'base (CloudConfigurationManager.GetSetting (" MyEntities "))', lưu tập tin và nhấn chuột phải vào nó trong Solution Explorer, tìm mục "Run Custom Tool" và nhấp vào nó. Model.Context.cs sẽ được tạo lại với các thay đổi mới của bạn. –

+0

Vì bạn đã thay đổi mẫu, các thay đổi của bạn sẽ không bị mất. –

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