14

Chúng tôi có ứng dụng ASP .NET (MVC) và đang sử dụng Entity Framework 6 để kết nối với cơ sở dữ liệu của chúng tôi. DbContext được xây dựng theo cách tiêu chuẩn và nó tải chuỗi kết nối thay mặt chúng ta. Các mã được tạo trông như thế này:Thiết lập Chuỗi kết nối EF trong Azure Web App

public partial class MyContext : DbContext 
{ 
    public MyContext(string connectionName) 
     : base("name=" + connectionName) 
    { 
    } 
} 

Chúng tôi thiết lập các chuỗi kết nối trong một web.config địa phương cũng theo một cách tiêu chuẩn:

<configuration> 
    <connectionStrings> 
    <add name="DefaultConnection" 
     connectionString="metadata=...;provider connection string=&quot;...&quot;" 
     providerName="System.Data.EntityClient" /> 

Khi chúng tôi công bố ứng dụng Azure chúng tôi tìm đến Azure Cổng thông tin, sau đó đến Cài đặt ứng dụng web, sau đó đến danh sách các chuỗi kết nối. Ở đó chúng tôi thêm chuỗi kết nối EF mà chúng tôi đã sử dụng cục bộ. Khi chúng tôi khởi động lại và truy cập ứng dụng, chúng tôi sẽ gặp phải lỗi thời gian chạy tùy thuộc vào loại chuỗi kết nối mà chúng tôi chọn.

Đối với một loại Custom chúng tôi nhận được lỗi thời gian chạy sau:

Keyword not supported: 'data source'.

Đối SQL Server hoặc SQL Database chúng tôi nhận ra lỗi run-time sau:

Keyword not supported: 'metadata'.

Điều này thực sự có vẻ như một đơn giản vì vậy chúng tôi đang tự hỏi điều gì đang xảy ra.

+0

Hãy xem tại đây: http://azure.microsoft.com/blog/2013/07/17/windows-azure-web-sites-how-application-strings-and-connection-strings-work/ – Fals

Trả lời

17

Sự cố là dấu ngoặc kép thoát: &quot;.

Chuỗi kết nối trong web.config có dấu ngoặc kép được thoát vì chúng được tuần tự hóa trong thuộc tính XML. Khi nhập một chuỗi kết nối trong cổng Azure, bạn nên cung cấp chuỗi không thoát gốc. Một cái gì đó như thế này: câu trả lời

metadata=...;provider connection string="Data Source=..."

David Ebbo là tốt để khẳng định rằng môi trường được thiết lập như bạn mong đợi. Bạn cũng nên chú ý đến tệp .pubxml khi xuất bản qua trình hướng dẫn trong Visual Studio: nó cũng sẽ cố gắng điền các chuỗi kết nối.

+0

Tôi có cùng vấn đề và sau khi chi tiêu al ong thời gian tìm kiếm tôi đã không tìm ra giải pháp. Azure chỉ bỏ qua Cài đặt ứng dụng và sử dụng chuỗi kết nối từ web.config. Như tôi thấy trong [Video 9 kênh] (https://channel9.msdn.com/Shows/Azure-Friday/Custom-configuration-and-application-settings-in-Azure-Web-Sites-with-Stefan-Schackow), nó sẽ là "ma thuật", nhưng không. –

9

'tùy chỉnh' phải chính xác tại đây. Trong trường hợp đó, providerName không thay đổi, vì vậy nếu bạn có System.Data.EntityClient trong cấu hình của mình, điều đó sẽ vẫn còn sau khi Azure runtime thay đổi nó.

Hãy thử truy cập Kudu Console và nhấp vào Môi trường để đảm bảo chuỗi kết nối có vẻ chính xác tại đó.

1

Nếu bạn có dòng này trong web.connfig

<add name="Entities" connectionString="metadata=res://*/TestDB.csdl|res://*/TestDB.ssdl|res://*/TestDB.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=XXXXXXXX.database.windows.net,1433;Initial Catalog=YourDB;User ID=YourUser;Password=XXXXXX&quot;" providerName="System.Data.EntityClient" /> 

Thêm này trong cổng thông tin xanh:

Name Column => Entities 

Value Column => metadata=res://*/TestDB.csdl|res://*/TestDB.ssdl|res://*/TestDB.msl;provider=System.Data.SqlClient;provider connection string="Data Source=XXXXXXXX.database.windows.net,1433;Initial Catalog=YourDB;User ID=YourUser;Password=XXXXXX" 

"Custom" - In the drop selection box 

Hãy chắc chắn (như đã nêu trong câu trả lời đầu tiên) để thay thế &quot; với "

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