13

Tôi đang sử dụng Entity Framework 4 với ứng dụng Asp.Net MVC3 của tôi. Vấn đề của tôi là tôi đang sử dụng Entity Framework để thực hiện hành động với cơ sở dữ liệu của tôi, đó là làm việc tốt. Đối với một số mục đích khác tôi cũng đang sử dụng Sql Connection để lưu trữ và lấy dữ liệu của tôi từ cơ sở dữ liệu. Tôi đang nhận đượcTừ khóa không được hỗ trợ: 'siêu dữ liệu'.? với Sql Connection trong Entityt Framework với MVC3

[Keyword not supported: 'metadata'] 

lỗi khi kết nối với cơ sở dữ liệu của tôi.

Đây là cấu hình web của tôi

<add name="VibrantEntities" connectionString="metadata=res://*/Vibrant.csdl|res://*/Vibrant.ssdl|res://*/Vibrant.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=KAPS-PC\KAPSSERVER;initial catalog=vibrant;integrated security=True;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 

Tôi đang sử dụng lớp Thư viện, Vì vậy, đây là App Config của tôi.

<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=4.3.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> 

    <add name="VibrantEntities" connectionString="metadata=res://*/Vibrant.csdl|res://*/Vibrant.ssdl|res://*/Vibrant.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=KAPS-PC\KAPSSERVER;initial catalog=vibrant;integrated security=True;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 

Trả lời

20

Chuỗi kết nối cho ADO.NET (trong trường hợp này là SqlConnection) không sử dụng định dạng đó. Bạn đang sử dụng một cái cụ thể cho Entity Framework. Các ADO.NET ta nên có cái gì đó như:

"data source=KAPS-PC\KAPSSERVER;initial catalog=vibrant;integrated security=True" 

Vì vậy, để tóm tắt, bạn cần hai chuỗi kết nối riêng biệt, một cho EF và một cho ADO.NET

-1

Theres một giải pháp tốt hơn ở đây, sử dụng các công cụ Entity Framework Power, đảo ngược thiết kế cơ sở dữ liệu của bạn vào dự án của bạn, sau đó bạn có thể sử dụng một chuỗi kết nối EF (một chuỗi kết nối bình thường) cho cả hai kịch bản.

+0

tôi không giúp bạn, bạn có thể giải thích thêm –

5

Một tùy chọn khác (trừ 2 chuỗi kết nối riêng biệt cho điều tương tự) là xây dựng một phương thức trả về một chuỗi kết nối ADO.NET từ đối tượng Entity Framework của bạn:

using System.Data.EntityClient; 
using System.Data.SqlClient; 
... 
private string GetADOConnectionString() 
{ 
    SalesSyncEntities ctx = new SalesSyncEntities(); //create your entity object here 
    EntityConnection ec = (EntityConnection)ctx.Connection; 
    SqlConnection sc = (SqlConnection)ec.StoreConnection; //get the SQLConnection that your entity object would use 
    string adoConnStr = sc.ConnectionString; 
    return adoConnStr; 
} 

(tôi đặt ở đâu đó trong này class Library của tôi, nơi các file edmx của tôi là)

(tôi nhận này từ http://justgeeks.blogspot.com/2009/11/getting-sqlconnection-from.html)

Hoặc thậm chí tốt hơn ... nếu thứ SqlConnection của bạn là thủ công các truy vấn SQL, bỏ qua SqlConnection hoàn toàn thông qua ExecuteStoredCommand:

new AdventureEntities().ExecuteStoreCommand(
     @" UPDATE Users 
       SET lname = @lname 
       WHERE Id = @id", 
     new SqlParameter("lname", lname), new SqlParameter("id", id)); 

(Tôi nhận này từ Entity Framework getting an sql connection)

10

Bạn chuỗi kết nối là cụ thể cho Entity Framework và chứa siêu dữ liệu. Bạn cần phải nhận được chuỗi kết nối nhà cung cấp của bạn từ nó. Bạn có thể làm điều đó bằng cách sử dụng EntityConnectionStringBuilder:

var efConnectionString = "Your Entity Framework connection string"; 
var builder = new EntityConnectionStringBuilder(efConnectionString); 
var regularConnectionString = builder.ProviderConnectionString; 
+1

Ngắn gọn, chính xác và dễ theo dõi! Cảm ơn –

+0

Xin chào, tôi nên viết mã này ở đâu? là nó trong web.config? – kurniawan26

+0

@ kurniawan26 bạn không thể viết mã C# trong 'web.config' của mình. Bạn sẽ cần phải sử dụng nó bất cứ nơi nào bạn kết nối với cơ sở dữ liệu. Chuỗi kết nối của bạn sẽ tồn tại trong 'web.config'. Bạn có thể đăng mã của mình trong một câu hỏi riêng và tôi sẽ sẵn lòng trợ giúp. –

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