webentwicklung-frage-antwort-db.com.de

Dynamischer Tabellenname mit Entity Framework

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

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

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.

3
Bryan

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