13

Używam Entity Framework 4 z moją aplikacją Asp.Net MVC3. Moim problemem jest to, że używam Entity Framework do wykonywania akcji z moją bazą danych, to działa dobrze. W innym celu używam również połączenia Sql do przechowywania i pobierania moich danych z bazy danych. DostajęSłowo kluczowe nie jest obsługiwane: "metadane".? z Sql Connection w Entityt Framework z MVC3

[Keyword not supported: 'metadata'] 

błąd podczas łączenia z mojej bazy danych.

To mój web config

<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" /> 

używam biblioteki klas, więc to jest mój App Config.

<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" /> 

Odpowiedz

20

Ciąg połączenia dla ADO.NET (w tym przypadku SqlConnection) nie bierze tego formatu. Używasz konkretnej dla Entity Framework. ADO.NET trzeba być coś takiego:

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

Więc Podsumowując, trzeba dwa oddzielne ciągi połączeń, po jednym dla EF i jeden dla ADO.NET

-1

Tam lepsze rozwiązanie tutaj, użyj narzędzi Power Entity Framework, dokonaj inżynierii wstecznej bazy danych w projekcie, następnie możesz użyć pojedynczego ciągu połączenia EF (który jest normalnym ciągiem połączenia) dla obu scenariuszy.

+0

i nie dostać się można wyjaśnić bardziej –

5

Inną opcją (inną niż 2 oddzielne ciągi połączeń do tej samej rzeczy) jest stworzenie metody, która zwraca ciąg połączenia z ADO.NET Entity Framework obiektu:

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; 
} 

(I miejsce to gdzieś w Moja biblioteka klasy, gdzie moje edmx pliki)

(mam to od http://justgeeks.blogspot.com/2009/11/getting-sqlconnection-from.html)

albo jeszcze lepiej ... jeśli SQLConnection rzeczy są manualne zapytań SQL, należy pominąć SQLConnection całkowicie poprzez ExecuteStoredCommand:

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

(mam to od Entity Framework getting an sql connection)

10

Ty ciąg połączenia jest specyficzna dla Entity Framework i zawiera metadane. Musisz pobrać z niego ciąg połączenia dostawcy. Można to zrobić za pomocą EntityConnectionStringBuilder:

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

Krótkie, precyzyjne i łatwe do naśladowania! Dzięki –

+0

Witam, gdzie powinienem napisać ten kod? czy to jest w web.config? – kurniawan26

+0

@ kurniawan26 nie możesz pisać kodu C# w swoim 'web.config'. Będziesz musiał go użyć wszędzie, gdzie będziesz się łączyć z bazą danych. Twój ciąg połączenia powinien jednak występować w 'web.config'. Możesz zamieścić swój kod w osobnym pytaniu, a ja z chęcią Ci pomogę. –

Powiązane problemy