Ich habe viele Tabellen mit der gleichen Modellstruktur, aber mit anderen Tabellennamen und anderen Daten (in diesem Fall ~ 100 Tabellen). Ich möchte den Tabellennamen zur Laufzeit mithilfe von Entity Framework dynamisch wechseln (z. B. die Namenstabelle vom Routing abrufen). Tabellen in der Datenbank werden dynamisch von anderen Skripten hinzugefügt und gelöscht. Gibt es eine Möglichkeit, dies mit einer guten Leistung wie dieser zu tun?
db.Table("TableName")<SpecificModel>.Where(x => x.ID == ID)
Möchtest du das machen?
foreach (string tableName in new[] { "Table1", "Table2" })
{
var result = dbContext.Database.SqlQuery<SpecificModel>(string.Format("SELECT * FROM {0} WHERE [email protected]", tableName), 1).FirstOrDefault();
}
Ich habe so etwas gemacht. http://nodogmablog.bryanhogan.net/2013/08/entity-framework-in-an-dynamics-nav-navision-envirnoment/
Ich hatte Tabellen, die identisch waren, aber unterschiedliche Namen hatten. Zum Beispiel eine Kundentabelle, aber mit unterschiedlichen Präfixen für verschiedene Unternehmen.
[ACME$Customer]
[SuperCorp$Customer]
Am Ende habe ich dynamische Kompilierung verwendet. Es ist ein ziemlich detaillierter Blog-Beitrag, auf den ich hier nicht näher eingehen werde.
Du kannst das:
// 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();