Entity Framework code-first: Abfragen eine Sicht, für die kein Primärschlüssel
Unseren Kunden gegeben hat, den Zugang zu Ansichten, in denen es kein primary key definiert ist. Ich weiß, Entity Framework benötigt einen Primärschlüssel für die Tabelle zu identifizieren.
Aber für Ansichten, die nicht mit primary key ist es immer noch möglich, auf Abfrage.
Ich versuche zu finden aber immer Entity Framework Fehler gibt, die sagen:
Fehler: : EntityType 'ViewWeight' hat keine definierten Schlüssel. Definieren Sie den Schlüssel für diese EntityType.
Ich verstehe Schlüssel ist wichtig für Tabellen, sondern für Ansichten, die nur Lesen, gibt es irgendein hack oder so zum Lesen der Werte ohne eine änderung der Ansicht selbst.
- mögliche Duplikate von wie views im code first entity framework und siehe auch stackoverflow.com/questions/5889905/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist nicht möglich, Sie in Entity Framework zu haben, Personen ohne Primärschlüssel.
Versuchen, einen möglichst eindeutigen Schlüssel aus den Ansichten, die Kombination von Spalten, ..., um einen eindeutigen Primärschlüssel.
Wenn ist nicht möglich, es ist eine Problemumgehung, wenn nur ein queryable Ansicht, mit heraus benötigen, um andere Operationen mit abgerufenen Werte zu löschen oder zu aktualisieren. Ändern Sie die Ansicht zum hinzufügen von
NEWID()
erzeugt es einen eindeutigen GUID-ID für jede Zeile, verwenden Sie diese neue Spalte als Primärschlüssel für die Entität.Das problem ist, wenn Sie wiederholen die gleiche Abfrage jedes mal, wenn Sie bekommen unterschiedliche ID für die gleiche Zeile.
Aktualisiert
Wenn Sie nicht ändern Sie die Ansicht, die Sie verwenden können Entität mit einer raw-Sql, erstellen der raw-sql als
In Ihren Modellen hinzufügen
Und konfigurieren Sie die neue Eigenschaft, die als Primärschlüssel.
Aber seien Sie vorsichtig, denn es ist nicht die Zusammenstellung mit dieser Art von code.
Select SYS_GUID() As ID, ...
müssen Sie benennen Sie die Spalte mit dem gleichen Namen in Ihrem Modell.Ich eine Ansicht erstellen, die enthält einen Primärschlüssel. Sicherstellen, dass alle Felder in der Ansicht von einem bestimmten Datentyp:
Anzahl(9) eher als die Zahl, CAST verwenden, um den Typ Sie möchten
Dann fügen Sie eine primary key-Einschränkung deaktiviert. Es wird nicht alles tun, außer erkannt werden durch entity-framework als Schlüssel