J'ai beaucoup de tables avec la même structure de modèle mais avec d'autres noms de tables avec d'autres données (dans ce cas, il s'agira d'environ 100 tables). Je souhaite basculer dynamiquement le nom de la table à l'exécution à l'aide d'Entity Framework (par exemple, obtenir une table de noms à partir du routage) Les tables de la base de données sont ajoutées et supprimées dynamiquement par un autre script. Il y a un moyen de faire cela avec de bonnes performances comme celle-ci?
db.Table("TableName")<SpecificModel>.Where(x => x.ID == ID)
Voulez-vous faire comme ça?
foreach (string tableName in new[] { "Table1", "Table2" })
{
var result = dbContext.Database.SqlQuery<SpecificModel>(string.Format("SELECT * FROM {0} WHERE ID=@p0", tableName), 1).FirstOrDefault();
}
J'ai fait quelque chose comme ça. http://nodogmablog.bryanhogan.net/2013/08/entity-framework-in-an-dynamics-nav-navision-envirnoment/
J'avais des tables identiques, mais elles avaient des noms différents. Par exemple, une table client mais avec des préfixes différents pour différentes sociétés.
[ACME$Customer]
[SuperCorp$Customer]
J'ai fini par utiliser une compilation dynamique. C'est un article de blog assez détaillé, je ne vais donc pas en parler ici.
Tu peux le faire:
// Gets entity type from specified namespace/Assembly
Type entityType = Type.GetType(string.Format("Your.NameSpace.{0},{1}", entityName, "Assembly.Name"));
// Finds item to update based on its primary key value
var entity = _dbContext.Find(entityType, entityKey);
// Finds column to update preference for
PropertyInfo propertyInfo = entity.GetType().GetProperty(entityField);
// Set and update (date example given)
propertyInfo.SetValue(entity, isOptIn ? (DateTime?)null : (DateTimeOffset?)DateTime.Now, null);
_dbContext.SaveChanges();