4 Stimmen

Dynamisches Laden von SQL-Tabellen in Entity Framework

Ich brauche dynamischen Zugriff auf einige SQL-Tabellen hoffentlich mit dem Entity Framework. Hier ist einige Pseudo-Code:

var Account = DB.Accounts.SingleOrDefault(x => x.ID == 12345);

die mir ein Konto-Objekt zurückgibt, das einige Felder namens "PREFIX", "CAMPAIGN ID" und weitere Informationen über die Konten enthält, die in separaten SQL-Tabellen mit der Namenskonvention PREFIX_CAMPAIGNID_MAIN gespeichert sind.

Die Tabellen haben alle die gleichen Felder, also dachte ich an die Erstellung einer neuen Entität, die nirgendwo zugeordnet ist und dann dynamisch laden es, wie so:

var STA01_MAIN = new MyAccount(); // my "un-mapped" entity

DB.LoadTable('STA01_MAIN').LoadInto(STA01_MAIN);

Ich kann jetzt alles über das Konto STA01_MAIN abrufen: STA01_MAIN.AccountId .

Meine Frage ist also: Wie greife ich auf diese Tabellen mit dem Entity Framework zu?

3voto

Adam Rackis Punkte 81499

Ich glaube nicht, dass EF eine LoadTable und LoadInto Methode hat, aber ObjectOntext.ExecuteStoreQuery könnte das sein, wonach Sie suchen:

http://msdn.microsoft.com/en-us/library/dd487208.aspx

Damit sollte es möglich sein, eine beliebige Abfrage an die Datenbank auszuführen und die Ergebnisse dann einem beliebigen Typ zuzuordnen, den Sie angeben (auch wenn er nicht anderweitig in EF zugeordnet ist).

Es versteht sich von selbst, dass Sie dafür verantwortlich sind, eine Abfrage zu erstellen, die die notwendigen Spalten für die Zuordnung zum Zieltyp liefert, und diese Abfrage auch anzupassen, wenn sich dieser Typ ändert.

Hier eine weitere Diskussion über seine Verwendung

http://social.msdn.microsoft.com/Forums/en-US/adonetefx/thread/44cf5582-63f8-4f81-8029-7b43469c028d/

Haben Sie in Erwägung gezogen, alle diese Tabellen (mit den identischen Spalten) in eine Vererbungsbeziehung in EF abzubilden und sie dann abzufragen als

db.BaseTypes.OfType<SpecificType>().Where(/*.....*/);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X