web-dev-qa-db-fra.com

Comment spécifier le nom de la base de données dans Code First?

Comment dire à EF comment nommer la base de données et où la placer?

S'il n'y a pas de chaîne de connexion dans Web.Config, il essaie de le placer dans le serveur SQLEXPRESS local, mais je souhaite le placer sur un serveur SQL connu et le nommer comme je le souhaite. Aucune suggestion?

52
Sam

Créez une chaîne de connexion dans app.config/web.config avec le même nom que le contexte et l'EF utilisera cette base de données.

55
amit_g

Comment utiliser un nom de chaîne de connexion différent avec EF

EF utilisera le nom de la base de données dans la chaîne de connexion. Lorsque vous souhaitez découpler le nom de votre chaîne de connexion de EF, vous devez fournir votre chaîne de connexion au constructeur. Exemple:

public class DatabaseContext : DbContext
{
    public DatabaseContext() 
      : base(ApplicationParameters.ConnectionStringName)
    {
    }

    public DatabaseContext(string connectionStringName)
      : base(connectionStringName)
    {
    }

}
23
ferventcoder

en classe :

public class Context : DbContext
{
    //SET CONNECTION STRING NAME FOR DataBase Name :
    public Context() : base("YourConnectionName") { }

    public DbSet<Category> Categories { get; set; }
    public DbSet<Product> Products { get; set; }
}

dans web.config:

<connectionStrings>  
    <add name="YourConnectionName" connectionString="Data Source=A-PC\SQLEXPRESS;
    Initial Catalog=MyDataBase; Integrated Security=True" 
    providerName="System.Data.SqlClient" />
</connectionStrings>  

Merci ferventcoder.
Ref => http://brandonclapp.com/connection-strings-with-entity-framework-5-code-first/

17
Amin Ghaderi

Sinon, vous pouvez définir le nom dans votre constructeur DbContext.

7
carlsb3rg

Comme déjà mentionné, vous pouvez déclarer votre chaîne de connexion dans le fichier de configuration de votre application avec un nom (disons "YourDBName"), puis la transmettre à l'appel de constructeur DbContext (je l'ajouterai à la réponse fournissant une réponse complète - bonnes réponses déjà données à ce sujet).

Sinon, vous pouvez définir ceci par programme dans votre classe d'extension DbContext, à l'aide de la propriété Database.Connection.ConnectionString. Par exemple:

App.config:

<!-- More.... -->
<!-- You can do this in a declarative way -->
<connectionStrings>
  <add name="YourDBName"
       connectionString="<Your connection string here>"
       providerName="<Your provider here>" />
</connectionStrings>
<!-- More.... -->

DatabaseContext.cs:

public class DatabaseContext : DbContext
    //Link it with your config file
    public DatabaseContext () : base("YourDBName") 
    {
        //And/Or you can do this programmatically.
        this.Database.Connection.ConnectionString = "<Your Connection String Here>";
        // More Stuff.....
    }
}
3
Nick Louloudakis

Si vous pointez votre chaîne de connexion vers une base de données existante, EF “Code first” n'essaiera pas d'en créer une automatiquement.

EF “code first” utilise une convention selon laquelle les classes de contexte recherchent par défaut une chaîne de connexion qui porte le même nom que la classe de contexte.

Utiliser d'abord le code ef avec une base de données existante

1
Daniel Little

Pour référence, voici comment procéder dans le code en utilisant VB.NET:

Public Class DatabaseContext : Inherits DbContext

Public Property Users As DbSet(Of User)

Public Sub New()
    MyBase.New("NewFileName.sdf")
End Sub

Classe de fin

0
M Granja