Comment créer une chaîne de connexion programmatique à MS SQL dans Entity Framework 6?

comment créer une chaîne de connexion programmatique à MS SQL dans Entity Framework 6?

j'utilise c# et WPF et je me demandais si quelqu'un pourrait me montrer comment ou me relier à une ressource qui montre comment configurer les chaînes de connexion de façon programmatique dans EF 6. L'article de MSDN explique que vous pouvez http://msdn.microsoft.com/en-us/data/jj680699#moving mais il ne va pas dans la création de véritables chaînes de connexion.

voici donc un exemple de EF6 fonctionne

App.Config

entityfram framework codeConfigurationType= " WPFwithEF.SqlConfiguration, WPFwithEF"> / entityfram framework

contexte

public class ProductContext : DbContext
{  
    public ProductContext():base("Wpf")
    { }
    public DbSet<Category> Categories { get; set; }
    public DbSet<Product> Products { get; set; }
}

Configuration.cs

namespace WPFwithEF
{
public class SqlConfiguration : DbConfiguration
{

    public SqlConfiguration()
    {
        SetProviderServices(SqlProviderServices.ProviderInvariantName,SqlProviderServices.Instance);           
        SetDefaultConnectionFactory(new SqlConnectionFactory());
    }
}
}

mais si la base de contexte est "name=Wpf" alors cette configuration ne fonctionne pas y a-t-il un moyen de faire que cela fonctionne? Et je cherche le dernier EF6, pas l'ancienne façon de le faire.

11
demandé sur Bob 2014-02-12 17:56:01

4 réponses

Vous pouvez utiliser le EntityConnectionStringBuilder comme décrit ici: comment: construire une chaîne de connexion EntityConnection

3
répondu csteinmueller 2014-02-12 14:01:34

Si vous êtes particulièrement de la connexion à une base de données MS Sql, cela devrait fonctionner:

private DbConnection CreateConnection(string connectionString)
{
    return new SqlConnection(connectionString);
}

private string CreateConnectionString(string server, string databaseName, string userName, string password)
{
    var builder = new SqlConnectionStringBuilder
    {
        DataSource = server, // server address
        InitialCatalog = databaseName, // database name
        IntegratedSecurity = false, // server auth(false)/win auth(true)
        MultipleActiveResultSets = false, // activate/deactivate MARS
        PersistSecurityInfo = true, // hide login credentials
        UserID = userName, // user name
        Password = password // password
    };
    return builder.ConnectionString;
}

utilisation:

public void ConnectoToDbWithEf6()
{
    using(var connection = CreateConnection(CreateConnectionString("server", "db", "you", "password")
    {
        using(var context = new YourContext(connection, true))
        {
            foreach(var someEntity in context.SomeEntitySet)
            {
                Console.WriteLine(someEntity.ToString());
            }
        }
    }

}

voir https://msdn.microsoft.com/en-Us/library/system.data.sqlclient.sqlconnectionstringbuilder%28v=vs.100%29.aspx

2
répondu hoekki 2015-01-29 16:14:45

j'ai déjà utilisé la chaîne DefaultConnection trouvée dans l'application.config (ou web.config) à titre d'exemple et j'ai simplement remplacé le" connectionstring " sur le DbContext, par celui que je voulais.

la chaîne de connexion ressemblait à quelque chose comme :

Data Source=(LocalDb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\aspnet-ShoppingList.Web-20150903103641.mdf;Initial Catalog=aspnet-ShoppingList.Web-20150903103641;Integrated Security=True

si je me souviens bien, vous devriez remplacer le cordon de connexion dans :

DbContext.Database.Connection.Connectionstring

PS. Vous ne pouvez l'utiliser de cette façon que si vous utilisez le Code-First. Si vous utilisez Model-First ou Database-First vous devriez utilisez le EntityConnectionStringBuilder .

1
répondu NicoJuicy 2015-10-19 23:46:15

vous pourriez utiliser le ConnectionStringPT nuget package. Il dispose de 3 méthodes:

  • crée une chaîne de connexion au serveur sans nom de base de données
  • crée la chaîne de connexion au serveur avec le nom de la base de données
  • crée une chaîne de connexion pour le contexte de la base de données Entitefram Framework

dernière méthode sera la bonne pour vous et asssuming que votre edmx est nommé produit après invocation

ConnectionStringHelper.ConnectionString.GetSqlEntityFrameworkConnectionString
("serverName", "databaseName", "Product");

Paquet will retour:

metadata=res://*/Product.csdl|res://*/Product.ssdl| res://*/Product.msl; 
provider=System.Data.SqlClient;provider connection string="Data Source=serverName;
Initial Catalog=databaseName;Integrated Security=True"
0
répondu Pawel Wujczyk 2018-02-19 19:23:58