web-dev-qa-db-fra.com

Nom de table dynamique avec framework d'entité

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)
10
Obin

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();
}
5
Palani Kumar

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.

3
Bryan

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();
0
nycdanielp