2011-02-28 18 views
27

¿Puedo apuntar la cadena de conexión en Dbml.designer.cs a la conexión en el app.conf? Escribí el código a continuación que señala con éxito al app.config.Conexión de conexión de punto en dbml a app.config

public leDataContext() : 
    base(ConfigurationManager.ConnectionStrings["leConnString"].ToString(), mappingSource) 
    { 
     OnCreated(); 
    } 

Sin embargo cada vez que modificar o una tabla en el dbml, comenzará a auto reemplazar ese código en este

public leDataContext() : 
      base("Data Source=.\\SQLEXPRESS;AttachDbFilename=\"D:\\My Projects\\App_Data\\le.mdf\";Integrated Security=True;Connect Timeout=30;User Instance=True", mappingSource) 
    { 
     OnCreated(); 
    } 

he ampliado la opción "Conexión". Establezca "Configuración de la aplicación" en Falso

Respuesta

38

No modifique el archivo Dbml.designer.cs manualmente, porque se reescribirá cuando edite/agregue una tabla, etc., como dijo. En lugar de esto establecer la propiedad Connection para el archivo .dbml diseñador para None y añadir una clase parcial con el constructor sin parámetros:

public partial class leDataContext 
{ 
    public leDataContext() : 
     base(ConfigurationManager.ConnectionStrings["leConnString"].ToString()) 
    { 
     OnCreated(); 
    }  
} 
+0

tengo hacer el connnection a estar vacío y añadir nuevas constructor junto con otros constructores. Pero aún cambia a 'base (" Fuente de datos =. \\ SQLEXPRESS; AttachDbFile..' public leDataContext(): base (System.Configuration.ConfigurationManager.ConnectionStrings ["leConnString"]. ToString()) { OnCreated();} leDataContext pública (conexión de cadena): base (conexión, mappingSource) { OnCreated();} leDataContext pública (System.Data.Conexión IDbConnection): base (connection, mappingSource) { OnCreated(); } – VeecoTech

+1

@belinq: debe agregar un nuevo archivo y definir allí el constructor sin parámetros (en una clase parcial). En este caso, este constructor no se sobrescribirá. Por lo que yo entiendo, coloque este constructor en el archivo 'dbml.designer.cs'; este es el problema. – Alex

+1

Nota: en Visual Studio 2013 no tenemos esa propiedad de conexión, así que simplemente eliminé directamente el nodo de conexión del archivo dbml xml. –

41

Esto es más como una extensión de la respuesta de Alex @.

Paso 1: Establezca la propiedad de conexión de su archivo .dbml en "ninguno".

enter image description here

Paso 2: crear una nueva clase parcial separada con el mismo nombre que el de la clase parcial existente para el archivo .dbml. Y establezca la propiedad connectionString utilizando el constructor sin parámetros.

public partial class DataClassesDataContext 
{ 
    public DataClassesDataContext() : base(ConfigurationManager.ConnectionStrings["Dev-connString"].ConnectionString) 
    { 
    OnCreated(); 
    } 
} 

Paso 3: casi hecho! Por último, debe definir su connectionString en su archivo app.config, como se muestra a continuación.

<connectionStrings> 

    <add 
    name="Dev-connString" 
    connectionString="Data Source=yasser-home;Initial Catalog=pp;Persist Security Info=True;User ID=sa;Password=gogole" 
    providerName="System.Data.SqlClient" /> 

</connectionStrings> 

Ahora puede cambiar fácilmente el connectionString desde el archivo app.config sin tener que volver a compilar el código, lo que sería el caso contrario.

¿Por qué creé una clase parcial separada? ¿No puedo editar el archivo existente Dbml.designer.cs?

no modifique el archivo Dbml.designer.cs manualmente, ya que se puede volver a escribir cuando se agrega/editar/borrar una tabla, proc almacenado etc.

+0

gracias. y establece la propiedad de conexión en none, porque de lo contrario define su propio constructor – symbiont

+0

Small addition; para establecer la conexión a ninguno, necesita abrir el dbml para que muestre el esquema del modelo a la izquierda. A continuación, haga clic con el botón derecho dentro del esquema y haga clic en Propiedades. – Yan

+0

Esta debería ser la respuesta, ya que incluye más instrucciones. – levis84

Cuestiones relacionadas