2012-09-04 17 views
7

Estoy utilizando EF 4.3 con un primer enfoque de código.Entity Framework 4.3 primer nombre de la base de datos

Con EF 4.3, se recomienda utilizar la nueva sección de configuración <entityFramework /> para inicializar la cadena de conexión para un contexto.

He hecho algunas búsquedas en línea, y parece que no puedo encontrar una forma conveniente de utilizar este método para inicializar una conexión con un nombre de base de datos configurable.

Por ejemplo, supongamos que tengo una entidad MyDBContext en mi aplicación. quiero que utilice el nombre de la base de datos especificada en la cadena de conexión de Initial Catalog=MyDB;

Usando el método antiguo de EF 4.1, puedo hacer esto sin ningún problema mediante la adición de la cadena de conexión a la sección <connectionstring> en el archivo de configuración.

<add name="MyDBContext" connectionString="Data Source=.\SQLEXPRESS; Initial Catalog=MyDB; Integrated Security=True; MultipleActiveResultSets=True" providerName="System.Data.SqlClient"/> 

Si quiero utilizar la nueva configSection que EF 4.3 soportes, no tengo forma de especificar un nombre de base de datos en la cadena de conexión. He intentado lo siguiente, pero se ignora la propiedad Initial Catalog. Creo que es ignorado por una buena razón, ya que todo el asunto es una DefaultConnectionFactory que podría ser utilizado por los múltiples contextos en mi solicitud

<entityFramework> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework"> 
     <parameters> 
      <parameter value="Data Source=.\SQLEXPRESS; Initial Catalog=MyDB; Integrated Security=True; MultipleActiveResultSets=True" /> 
     </parameters> 
    </defaultConnectionFactory> 
</entityFramework> 

El nombre de base de datos por defecto que mi enfoque codefirst crea como resultado del uso de este es MyNamespace.MyDBContext

Entiendo que hay una manera de sobrescribir esta denominación predeterminada pasando un valor al argumento nameOrConnectionString en el objeto base DBContext.

Así que podría hacer algo como esto:

public MyDBContext() : base("MyDB") { } 

Sin embargo, si tomo este enfoque termino hardcoding nombres de base de datos en mi aplicación y personalmente no me gusta esto.

Me pregunto si hay alguna manera de que pueda pasar un nombre de base de datos para mi contexto de base de datos convenientemente desde el archivo Web.config, o debería simplemente continuar usando la sección <connectionstrings>?

Respuesta

0

¿Con qué frecuencia cree que el nombre de la base de datos tendrá que cambiar?

Dicho esto, no me he encontrado con este problema yo mismo (estoy muy difícil de codificar el nombre de la base de datos, no debería cambiar) una opción podría ser almacenar el nombre de la base de datos que desea en el Web.config como configuración de la aplicación, y luego haz que tu código extraiga el valor desde allí.

EDIT: También es posible que desee echar un vistazo a http://blogs.msdn.com/b/adonet/archive/2011/01/27/using-dbcontext-in-ef-feature-ctp5-part-2-connections-and-models.aspx:

public UnicornsContext() 
    : base("name=UnicornsCEDatabase") 
{ 
} 

Con esto tirando de la cadena de conexión con ese nombre en particular:

<configuration> 
<connectionStrings> 
    <add name="UnicornsCEDatabase" 
     providerName="System.Data.SqlServerCe.4.0" 
     connectionString="Data Source=Unicorns.sdf"/> 
</connectionStrings> 
</configuration> 

Según http://blogs.msdn.com/b/adonet/archive/2012/01/12/ef-4-3-configuration-file-settings.aspx esto todavía debe trabajar en 4.3.

+1

En general, no espero que cambie el nombre de la base de datos. Pero podría haber casos en los que el nombre de base de datos colisione con otro nombre de base de datos en la misma instancia de SQL.También es el caso si quiero ejecutar más de una instancia de la misma aplicación en la misma instancia de SQL, no se puede hacer sin recompilar la aplicación y cambiar el nombre de la base de datos. No es ideal. –

+0

Entonces yo diría que eche un vistazo a una de las dos opciones anteriores. Personalmente, parece que la idea del blog de ADO.NET sería la mejor opción de las dos. –

+0

Gracias, supongo que me quedaré con la clave connectionstring en el archivo Web.config según el artículo al que se hace referencia. –

Cuestiones relacionadas