2015-11-05 8 views
5

Ich habe meinem Entitätsmodell eine Datenbankansicht hinzugefügt. Jetzt versuche ich eine ObjectSet in meine ObjectContext zu setzen, damit ich auf die Ansicht in meiner Anwendung zugreifen kann.WPF-Entität kann kein ObjectSet einer Sicht erstellen?

Für normale Tische meine ObjectSet würde wie folgt aussehen:

private ObjectSet<StarVendor> _StarVendor; 
public ObjectSet<StarVendor> StarVendor 
{ 
    get 
    { 
     if ((_StarVendor == null)) 
     { 
      _StarVendor = base.CreateObjectSet<StarVendor>("Stratus_X_TestEntities.StarVendors"); 
     } 
     return _StarVendor; 
    } 
} 

Also tat ich das gleiche für meine Ansicht:

private ObjectSet<CatalogItemSearch> _CatalogItemSearch; 
public ObjectSet<CatalogItemSearch> CatalogItemSearch 
{ 
    get 
    { 
     if ((_CatalogItemSearch == null)) 
     { 
      _CatalogItemSearch = base.CreateObjectSet<CatalogItemSearch>("Stratus_X_TestEntities.CatalogItemSearch"); 
     } 
     return _CatalogItemSearch; 
    } 
} 

Aber wenn der Code ausgeführt wird erhalte ich eine Ausnahme:

System.InvalidOperationException "Der EntitySet-Name 'Stratus_X_TestEntities.CatalogItemS earch‘konnte nicht gefunden werden“

Ich weiß, dass ich für eine Ansicht nicht benötigen Sie das Add/update/delete-Funktionalität, die ObjectSet bietet.

Gibt es eine alternative Set-Art, die ich dafür verwenden sollte?

oder könnte dieser Fehler von etwas sein, das völlig unabhängig davon ist, dass es eine Ansicht ist?

dank

+0

Wie ich verstanden habe, ist es Code First Ansatz? – StepUp

+0

Die Ansicht wird mit der Funktion 'Update Model from Database' in die .edmx gezogen. Ich konnte keine nützliche .tt-Datei finden, um meinen ObjectContext zu generieren, so dass dieser Teil von Hand geschrieben wird. So ist es nicht genau "Code zuerst", wie ich es verstehe – Shaboboo

+0

Update-Modell aus der Datenbank ist Datenbank zuerst –

Antwort

1

Wenn Sie CodeFirst verwenden Sie immer die Karte ansehen können, wie Sie eine Tabelle Karte (mit einem DbSet) und dann sollte es funktionieren.

+0

Die Ansicht wird mit der Funktion 'Update Model from Database' in die .edmx übernommen, ohne Fehler. Ich habe den Schlüssel auf die richtige Eigenschaft gesetzt. Im DbContext wird ein dbSet <> wie für alle anderen Tabellen erzeugt. Um die Daten abzufragen habe ich einen ObjectContext mit einem ObjectSet <> für jede Entität. Hier habe ich Probleme. base.CreateObjectSet ("Stratus_X_TestEntities.CatalogItemSearch"); wirft die Ausnahme – Shaboboo

2

Ich möchte darauf hinweisen, dass die ObjectSet API zusammen mit der ObjectContext API die alte API des Entity Framework ist, die normalerweise heute nicht mehr verwendet wird.

Es war Teil von Entity Framework 4.0, das war lange her (siehe Wikipedia: Entity Framework history).

Im Jahr 2011 wurde das Entity-Framework Version 4.1 veröffentlicht, und von nun an wurde die Verwendung der API DbSet und DbContext empfohlen. Die aktuelle produktionsfertige Version von entity framwork ist Version 6 und Version 7 wird gerade bearbeitet.

empfehle ich Ihnen zu Entity Framework zu bewegen 6, die Sie in Ihrem Visual Studio-Projekt mit Nuget installieren: EntityFramework 6.1.3

Hier ein article ist, die ein Kapitel über die Unterschiede hat die DbSet API im Vergleich bringt die alte API . Schauen Sie sich das Kapitel "Einführung in DbContext & DbSet" an.

+0

Ich habe Ihnen das Kopfgeld gegeben, weil diese Antwort die bisher hilfreichste war. Ich habe es geschafft, meinen Code nach EF 6 zu verschieben, obwohl jetzt keine funktioniert, aber keine funktioniert. Gleicher Fehler. Ich wünschte, diese Fehlermeldung wäre nicht so vage mit so vielen möglichen Ursachen! – Shaboboo

+0

Nun, vielleicht können Sie eine neue Frage stellen, dieses Mal mit Ihrem neuen Code mit 'DbSet' und darauf hinweisen, dass Sie EF6 benutzen. – Martin

Verwandte Themen