2009-06-12 10 views
2

Diese Frage ist eine Erweiterung einer anderen Frage, aber ich denke, dass es einen eigenen Thread garantiert. Siehe See Silverlight QuestionDynamische Daten mit Entity Framework und RIA Services

Ich habe eine gespeicherte Prozedur (SQL 2005), die eine dynamische Datei (verschiedene Spalten/Schema) jedes Mal zurückgibt, wenn es aufgerufen wird.

Ich möchte dies in Silverlight 3.0 konsumieren, also muss ich dies irgendwie mit Entity Framework und RIA Services verbinden. Ich brauche das auch Bindable (Silverlight Grid), also brauche ich diese dynamischen Spalten, um über Eigenschaften (Rasterbeschränkung) erreichbar zu sein. Irgendwelche Ideen?

Antwort

2

In der derzeit ausgelieferten Version von Entity Framework ist der einzige Typ gespeicherter Prozeduren, die Sie zuordnen können, diejenigen, die Entitätstypen zurückgeben. Das Mapping erfolgt in der Regel vor dem Kompilieren, obwohl es zumindest theoretisch möglich erscheint, Entity Framework-Metadaten zur Laufzeit zu generieren.

Daher sehe ich ein paar Möglichkeiten.

  1. Geben Sie die ganze Idee auf, eine Prozedur zu konsumieren, die kein definiertes Schema zurückgibt. Sie können eine solche Prozedur vor dem Kompilieren niemals zuordnen.
  2. Dynamische Generierung von EDMX zur Laufzeit, um einen Entitätstyp vor dem Aufruf den erwarteten Ausgabespalten der Prozedur zuzuordnen. Beachten Sie, dass die aktuelle Version von Entity Framework ein wenig heikel für die Spalten ist, die eine Prozedur zurückgibt; Sie finden eine Dokumentation dazu auf MSDN.
  3. In .NET 4.0 gibt es new features which allow you to inform the Entity Framework about your client schema at runtime without having to generate EDMX first. Möglicherweise können Sie diese Funktionen nutzen, um einen Entitätstyp den erwarteten Ausgabespalten der Prozedur zuzuordnen.
  4. Auch in .NET 4.0 kann es Unterstützung für Procs geben, die skalare Werte zurückgeben. Ich kann mich nicht erinnern, ob das der Fall ist oder nicht.
  5. Sie können immer eine Standarddatenbankverbindung von der Entitätsverbindung abrufen und die Prozedur direkt mit regulären SqlCommands ausführen. Leider macht dies Ihren Code-Datenbank-Provider-spezifischen, aber es kann die einfachste Lösung für Ihr Problem sein. In der Tat ist die Verwendung eines solchen Verfahrens bereits datenbankserverspezifisch.
+1

+1 dank zu tun. .NET 4.0 ist wirklich keine Option. Ich lehne mich Richtung # 1, aber bis jetzt kann ich nicht an eine andere Möglichkeit denken (siehe meine verwandte Frage). Wenn ich # 5 wähle, sind die Spalten über Eigenschaften verfügbar. Wenn Sie die Silverlight-Datengruppendokumentation richtig verstehen, können Sie nur Spalten an Eigenschaften binden. –

0

Sie könnten einen WCF-Webdienst wraper verwenden für Ihre SP und verwenden Sie den WCF-Dienst accesing als Datenquelle Brad Abrams einen Weg hat, dass seine Serie von Artikeln über RIA Services

Verwandte Themen