Problemas al crear una conexión de entidad desde una conexión SQL.
Estamos convirtiendo nuestro acceso a la base de datos para usar Azure Identity con EF. Probé varios métodos diferentes y fallé porque EF espera que se cree un modelo y se pase en la cadena de conexión, lo cual no pude hacer con DBConnection. Finalmente encontré una forma de crear la EntityConnection a partir de una SQLConnection para poder conservar toda la información de la cadena de conexión original y agregar los metadatos según sea necesario. Aquí está mi código:
public static EntityConnection GetEntityConnectionString( string efConnectionString, string accessToken )
{
MetadataWorkspace workspace = new MetadataWorkspace( new string[] { "res://*/" }, new Assembly[] { Assembly.GetExecutingAssembly() } );
SqlConnection sqlConnection = new SqlConnection( efConnectionString );
sqlConnection.AccessToken = accessToken;
EntityConnection entityConnection = new EntityConnection( workspace, sqlConnection );
return entityConnection;
}
Cuando ejecuto esto y llego a la línea
EntityConnection entityConnection = new EntityConnection( workspace, sqlConnection );
Obtengo el siguiente error:
System.ArgumentException: 'MetadataWorkspace must have EdmItemCollection pre-registered.'
No estoy seguro de qué hacer en este punto y realmente apreciaría cualquier visión que se pueda proporcionar.
davy.ai
Parece que el error se debe a que el MetadataWorkspace no está configurado correctamente. El mensaje de error menciona que la EdmItemCollection debe registrarse previamente en el MetadataWorkspace.
Una solución podría ser crear una EdmItemCollection y añadirla al MetadataWorkspace antes de crear la EntityConnection. Esto se puede hacer usando la clase EdmxReader para leer los metadatos desde el archivo .edmx y extraer la EdmItemCollection.
Aquí tienes un ejemplo de cómo se puede hacer esto:
En este ejemplo, se utiliza la clase EdmxReader para leer los metadatos desde el archivo .edmx especificado en el parámetro metadataFilePath. Las secciones Csdl, Ssdl y Msl se extraen del archivo .edmx y se utilizan para crear la EdmItemCollection, StoreItemCollection y StorageMappingItemCollection. Estas colecciones se registran luego en el MetadataWorkspace antes de crear la EntityConnection.
Ten en cuenta que también se utiliza el constructor del generador de cadenas de conexión para extraer el nombre del esquema, que se utiliza para crear el nombre del modelo en los metadatos.
¡Espero que esto sea de ayuda!