asp.net - Palabra clave no soportada: ''metadata''. con Sql Connection en Entityt Framework con MVC3
asp.net-mvc asp.net-mvc-3 (4)
Estoy usando Entity Framework 4 con mi aplicación Asp.Net MVC3. Mi problema es que estoy usando Entity Framework para realizar una acción con mi base de datos, eso está funcionando bien. Para otro propósito también estoy usando Sql Connection para almacenar y recuperar mis datos de la base de datos. estoy obteniendo
[Keyword not supported: ''metadata'']
error al conectar con mi base de datos.
Esta es mi configuración web
<add name="VibrantEntities" connectionString="metadata=res://*/Vibrant.csdl|res://*/Vibrant.ssdl|res://*/Vibrant.msl;provider=System.Data.SqlClient;provider connection string="data source=KAPS-PC/KAPSSERVER;initial catalog=vibrant;integrated security=True;multipleactiveresultsets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
Estoy usando la biblioteca de clases, así que esta es mi configuración de la aplicación.
<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="data source=KAPS-PC/KAPSSERVER;initial catalog=vibrant;integrated security=True;multipleactiveresultsets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
Aquí hay una mejor solución, use las herramientas de Entity Framework Power, realice ingeniería inversa de su base de datos en su proyecto, luego puede usar una única cadena de conexión EF (que es una cadena de conexión normal) para ambos escenarios.
La cadena de conexión para ADO.NET (en este caso SqlConnection
) no toma ese formato. Está utilizando el específico para Entity Framework. El ADO.NET debería ser algo así como:
"data source=KAPS-PC/KAPSSERVER;initial catalog=vibrant;integrated security=True"
Entonces, para resumir, necesita dos cadenas de conexión separadas, una para EF y otra para ADO.NET
Su cadena de conexión es específica de Entity Framework y contiene metadatos. Debes obtener la cadena de conexión de tu proveedor. Puedes hacerlo usando EntityConnectionStringBuilder
:
var efConnectionString = "Your Entity Framework connection string";
var builder = new EntityConnectionStringBuilder(efConnectionString);
var regularConnectionString = builder.ProviderConnectionString;
Otra opción (aparte de 2 cadenas de conexión separadas para la misma cosa) es construir un método que devuelva una cadena de conexión ADO.NET desde su objeto Entity Framework:
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;
}
(Coloco esto en algún lugar de mi Biblioteca de clases donde están mis archivos de edmx)
(Recibí esto de http://justgeeks.blogspot.com/2009/11/getting-sqlconnection-from.html )
O incluso mejor ... si su material de SQLConnection es consultas SQL manuales, omita el SQLConnection por completo a través de ExecuteStoredCommand:
new AdventureEntities().ExecuteStoreCommand(
@" UPDATE Users
SET lname = @lname
WHERE Id = @id",
new SqlParameter("lname", lname), new SqlParameter("id", id));
(Obtuve esto de Entity Framework obteniendo una conexión sql )