J'ai un système qui prend en charge plusieurs produits. Chaque produit a sa propre base de données avec le même schéma exact. Lorsque je passe la chaîne de connexion en paramètre à mon constructeur de contexte de données, il utilise toujours la base de données par défaut listée dans la chaîne de connexion ou la base de données par défaut de l'utilisateur si je ne fournis pas de catalogue initial dans la connexion chaîne. Je voudrais pouvoir faire en sorte que le système utilise une base de données sans avoir à changer la chaîne de connexion et en passant le nom de la base de données comme paramètre.Base de données LINQ
Voici un exemple du code que je utilise:
class Program
{
static void Main(string[] args)
{
var d = new Data("Data Source=(LOCAL);Initial Catalog=Database1;Integrated Security=true;");
var d1 = new Data("Data Source=(LOCAL);Initial Catalog=Database2;Integrated Security=true;");
Console.ReadLine();
}
}
internal class Data
{
public Data(string connection)
{
using (var ctx = new DataClassDataContext(connection))
{
var query = from c in ctx.MyTable select c;
try
{
Console.WriteLine(query.Count());
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
}
Si ce code est exécuté, le premier résultat va tirer de Database1 et le second résultat va tirer de Database2. Je voudrais qu'il puisse tirer d'une base de données qui n'est pas fournie dans la chaîne de connexion. La raison en est que la base de données peut changer en fonction d'un scénario spécifique, mais la chaîne de connexion restera la même.
Voici un exemple de ce que je me sers de « faux », mais je ne pense pas vraiment que c'est la meilleure solution pour cela:
class oConnection
{
public string Server { get; set; }
public string Database { get; set; }
public bool IntegratedSecurity { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
}
class Program
{
static void Main(string[] args)
{
var d = new Data(new oConnection
{
Database = "Database1",
Server = "(Local)",
IntegratedSecurity = true
});
var d1 = new Data(new oConnection
{
Database = "Database2",
Server = "(Local)",
IntegratedSecurity = true
});
Console.ReadLine();
}
}
internal class Data
{
private static string BuildConnection(oConnection connection)
{
var sb = new StringBuilder();
sb.Append("Data Source=" + connection.Server + ";Initial Catalog=" + connection.Database + ";");
if(connection.IntegratedSecurity)
{
sb.Append("Integrated Security=true;");
}
else
{
sb.Append("user id=" + connection.UserName + ";password=" + connection.Password);
}
return sb.ToString();
}
public Data(oConnection connection)
{
using (var ctx = new DataClassDataContext(BuildConnection(connection)))
{
var query = from c in ctx.MyTable select c;
try
{
Console.WriteLine(query.Count());
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
}
Une autre note: le but de c'est vraiment être en mesure de prendre en charge ne pas avoir plusieurs chaînes de connexion différentes lors de l'exécution de requêtes qui s'étendra sur plusieurs bases de données. Par exemple: Si je veux interroger les enregistrements de compte à partir d'une base de données, puis interroger une sorte de données de recherche à partir d'une autre base de données, je devrais créer une nouvelle chaîne de connexion pour le contexte.
Toute aide serait appréciée. Merci
Ahh, c'est aussi ce que je cherchais. Merci un million! – CodeLikeBeaker