J'implémente un outil d'importation qui lit les données du fichier et les stocke dans une base de données. Nous avons une base de données en deux éditions différentes: une édition "complète" et une édition "légère". L'édition légère a une table de moins et quatre autres tables qui référencent la table manquante n'ont pas non plus cette colonne de clé étrangère.LINQ par rapport à un objet dynamique
J'ai déjà implémenté l'outil pour importer les données dans la base de données "complète" en utilisant Linq-to-Sql et je veux réutiliser la logique pour l'importation dans la version légère de la base de données.
Mon idée était d'utiliser dynamic
objets à cette fin.
J'ai donc ajouté deux fichiers Linq-To-SQL .dbml
différents à mon projet et les ai remplis avec la table respective. Je leur ai demandé d'utiliser différents espaces de noms pour éviter les conflits de noms.
Je n'ai aucun problème pour initialiser le DbContext
(au moins je ne reçois pas d'erreur de compilation ici) de la variable dynamique:
bool _usefirstdb;
dynamic _db;
if (_usefirstdb)
{
_db = new FirstDBDataContext (string.Format(SqlScripts.SqlServerConnectionString, args[1], args[2]));
}
else
{
_db = new SecondDBDataContext(string.Format(SqlScripts.SqlServerConnectionString,args[1], args[2]));
}
mais je m'y suis des problèmes avec l'exécution de requêtes LINQ contre ce objets:
var query = from inst in _db.Instances
where inst.Name.Equals(args[3])
select inst.Id;
en effet, le type de inst
ne peut être déterminée par le compilateur (et n'est pas dynamic
).
Y at-il un moyen de surmonter ce problème? Je sais que C# est de type statique, mais je ne vois pas d'autre moyen de réutiliser mon code ...
interfaces d'utilisation. – SLaks
L'utilisation de 'dynamic' est souvent le signe d'un mauvais code. Pas toujours, mais souvent. – Bobson
@ SLaks: Je tombe sur un autre problème alors, voir la nouvelle question ici: http://stackoverflow.com/questions/16731814/linq-against-two-different-data-contexts-using-interfaces –