13

Ich benutze Entity Framework 4 mit meiner Asp.Net MVC3-Anwendung. Mein Problem ist, dass ich Entity Framework verwende, um Aktionen mit meiner Datenbank durchzuführen. Das funktioniert gut. Zu einem anderen Zweck verwende ich auch SQL-Verbindung zum Speichern und Abrufen meiner Daten aus der Datenbank. Ich bekommeSchlüsselwort nicht unterstützt: 'Metadaten'.? mit Sql-Verbindung in Entity Framework mit MVC3

[Keyword not supported: 'metadata'] 

Fehler beim Verbinden mit meiner Datenbank.

Das ist mein 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" /> 

Ich bin mit Klasse-Bibliothek, also das ist meine 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" /> 

Antwort

20

Die Verbindungszeichenfolge für ADO.NET (in diesem Fall SqlConnection) nehmen nicht dieses Format. Sie verwenden das für Entity Framework spezifische. Die ADO.NET sollte eine sein, so etwas wie:

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

Also, um es zusammenzufassen, müssen Sie zwei separate Verbindungszeichenfolgen, eine für EF und eine für ADO.NET

-1

Theres eine bessere Lösung hier, Verwenden Sie die Power Tools von Entity Framework, um die Datenbank in Ihr Projekt zurückzuentwickeln. Anschließend können Sie für beide Szenarien eine einzelne EF-Verbindungszeichenfolge (eine normale Verbindungszeichenfolge) verwenden.

+0

ich Sie nicht erhalten, können Sie mehr erklären –

5

Eine weitere Option (außer 2 separate Verbindungszeichenfolgen für die gleiche Sache) ist eine Methode zu entwickeln, die ein ADO.NET-Verbindungszeichenfolge aus dem Entity Framework-Objekt zurückgibt:

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

(Ich stelle diese irgendwo in meine Klassenbibliothek, wo meine edmx Dateien)

(ich habe diese von http://justgeeks.blogspot.com/2009/11/getting-sqlconnection-from.html)

Oder noch besser ... wenn Ihr SQLConnection- Sachen manuelle SQL-Abfragen sind, die SQLConnection vollständig über die ExecuteStoredCommand überspringen:

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

(ich habe diese von Entity Framework getting an sql connection)

10

Sie Verbindungszeichenfolge ist spezifisch für Entity Framework und enthält Metadaten. Sie müssen Ihre Anbieterverbindungszeichenfolge daraus abrufen. Sie können es EntityConnectionStringBuilder mit tun:

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

Kurze, präzise und leicht zu folgen! Danke –

+0

Hallo, wo soll ich diesen Code schreiben? ist es in der web.config? – kurniawan26

+0

@ kurniawan26 Sie können C# -Code nicht in Ihre 'web.config' schreiben. Sie müssen es verwenden, wo immer Sie sich mit der Datenbank verbinden. Ihre Verbindungszeichenfolge sollte jedoch in 'web.config' liegen. Sie können Ihren Code in einer separaten Frage veröffentlichen und ich werde Ihnen gerne helfen. –

Verwandte Themen