2015-06-24 16 views
10

Ich habe viele Tabellen mit der gleichen Modellstruktur, aber mit anderen Tabellennamen mit anderen Daten (in diesem Fall werden ~ 100 Tabellen). Ich möchte den Tabellennamen dynamisch in Runtime mit Entity Framework wechseln (zB get name table from routing). Tabellen in der Datenbank werden dynamisch von einem anderen Skript hinzugefügt und gelöscht. Es gibt einen Weg, dies mit solch guten Leistungen zu tun?Dynamischer Tabellenname mit Entitätsframework

db.Table("TableName")<SpecificModel>.Where(x => x.ID == ID) 
+2

Ich kann nicht helfen, aber wundere mich, warum Sie nicht nur Ihre Tabellen in einem Tisch zu normalisieren? Wenn sie alle die gleiche Struktur haben ... –

+0

Der einfachste Weg ist normalisieren, aber ich kann es nicht in diesem Projekt tun. Tabellen müssen getrennt werden – Obin

+0

Um das zu tun, was Sie tun möchten, müssen Sie Ihre edmx-Datei mit den neuen Metadaten der erstellten Tabellen aktualisieren. Ich kenne keine Möglichkeit, dies zur Laufzeit auszuführen, da das Aktualisieren der EDMX-Datei eine Neuerstellung erfordert, da neuer Code generiert wird. Ich denke, dass Entity Framework derzeit nicht unterstützt, was Sie versuchen zu tun. – tdbeckett

Antwort

5

Möchten Sie so?

foreach (string tableName in new[] { "Table1", "Table2" }) 
{ 
    var result = dbContext.Database.SqlQuery<SpecificModel>(string.Format("SELECT * FROM {0} WHERE [email protected]", tableName), 1).FirstOrDefault(); 
} 
+0

Es funktioniert gut, aber es ist immer noch Abfrage. Gibt es eine Möglichkeit, dies mit LINQ zu tun? – Obin

+0

Ja, ich denke, wir können das in LINQ mit Reflection und Expression machen, aber es ist nicht so kompliziert, sobald ich es euch sagen lasse. Im Entity-Framework wird schließlich der linq-Ausdruck in eine SQL-Abfrage konvertiert, also kein Unterschied mehr. Mit dieser Methode auch EF Ihre Daten in Klassenobjekt (SecificModel) richtig :) –

+0

Dies wird für SQL-Injektion ermöglichen. – tdbeckett

3

Ich habe so etwas getan. http://nodogmablog.bryanhogan.net/2013/08/entity-framework-in-an-dynamics-nav-navision-envirnoment/

Ich hatte Tabellen, die identisch waren, aber sie hatten unterschiedliche Namen. Zum Beispiel eine Kundentabelle mit unterschiedlichen Präfixen für verschiedene Unternehmen.

[ACME$Customer] 
[SuperCorp$Customer] 

Ich endete mit dynamischen Kompilierung. Es ist ein ziemlich detaillierter Blogbeitrag, auf den ich hier nicht näher eingehen werde.