Tengo muchas tablas con la misma estructura de modelo pero con otros nombres de tablas con otros datos (en este caso serán ~100 tablas). Quiero cambiar dinámicamente el nombre de la tabla en tiempo de ejecución usando Entity Framework (por ejemplo, obtener la tabla de nombres del enrutamiento). Las tablas en la base de datos se agregan y eliminan dinámicamente mediante otro script. ¿Hay una manera de hacer esto con un buen rendimiento como este?
db.Table("TableName")<SpecificModel>.Where(x => x.ID == ID)¿Quieres hacer así?
foreach (string tableName in new[] { "Table1", "Table2" }) { var result = dbContext.Database.SqlQuery<SpecificModel>(string.Format("SELECT * FROM {0} WHERE ID=@p0", tableName), 1).FirstOrDefault(); }Hice algo como esto. http://nodogmablog.bryanhogan.net/2013/08/entity-framework-in-an-dynamics-nav-navision-envirnoment/
Tenía tablas que eran idénticas, pero tenían nombres diferentes. Por ejemplo, una tabla de clientes pero con diferentes prefijos para diferentes empresas.
[ACME$Customer] [SuperCorp$Customer]Terminé usando compilación dinámica. Es una publicación de blog bastante detallada, así que no entraré en ella aquí.
Puedes hacerlo:
// 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();