wie verwenden von Ansichten in entity framework code first
Wie kann ich die Datenbank-Ansicht in entity framework code first,
Keine der Antworten erklären, wie man erstellen Sie eine Ansicht mit EF-Migrationen. Siehe Antwort für eine ähnliche Frage.
InformationsquelleAutor Sagar | 2011-09-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie, wie ich, daran interessiert sind nur in mapping-entity aus einer anderen Datenbank (erp in meinem Fall) beziehen sich auf Entitäten, die bestimmte Ihrer Anwendung können Sie dann die Aussicht, wie Sie eine Tabelle (map-Ansicht in der gleichen Weise!). Offensichtlich, wenn Sie versuchen zu aktualisieren, dass die Entitäten, erhalten Sie eine Ausnahme aus, wenn die Sicht nicht aktualisierbar ist.
Die Vorgehensweise ist die gleiche wie bei der normalen (basierend auf einer Tabelle) Entitäten:
Verwenden FooViewConfiguration Datei einen anderen Namen für die Ansicht (mit ToTable("Foo"); im Konstruktor) oder zum festlegen von bestimmten Eigenschaften
Fügen Sie die FooViewConfiguration-Datei auf die modelBuilder, zum Beispiel ovveriding die OnModelCreating Methode der Kontext:
würde Sie sich kümmern, zu erarbeiten, oder geben Sie einen link auf Ansicht hinzufügen, die als Teil einer IDatabaseInitializer
Meinst du einfach eine Klasse erstellen wie andere Entitäten, die für die Ansicht, zum Beispiel den Namen
FooView
und fügen Sie eineDbSet<FooView>
Eigenschaft in meinem DbContext-Klasse, und entity framework-weiß auf Karte, um die Ansicht (sagen wir, wir haben eine Ansicht namensdbo.Foo
) ??Ist es nur mir so, oder jeder ist immer leer-Tabelle erstellt, die von der migration? Gibt es eine Möglichkeit das zu vermeiden?
Nur sicherstellen, dass hier diese Lösung ist erforderlich, uns die Sicht auf die SQL-Datenbank, die vorher extern? Ist es möglich zu definieren, Blick in den code eingeben und füllen Sie in der Datenbank über Add-Migration/Update-Database-Befehl?
InformationsquelleAutor Daniele Armanasco
Dies ist möglicherweise ein update, aber views mit EF Code first fügen Sie einfach [Table("NameOfView")] an der Spitze der Klasse, und alles sollte richtig funktionieren, ohne zu gehen durch alle Reifen alle anderen gehen durch. Auch Sie haben zum report eine der Spalten als [key] - Spalte. Hier ist mein Beispiel-code unten, um es zu implementieren.
Und hier ist, was der Rahmen sieht aus wie
Eigentlich Nein, es ist nicht. Ich habe versucht, ohne Erfolg, auf die akzeptierte Antwort, und es hat nicht funktioniert gut für mich. Aber dann bin ich mit Migrationen, so kann dies beeinflusst die Dinge. Ich fand, ich hatte zu tun, meinen Migrationen zuerst, DANN fügen Sie meine Klasse anzeigen, da es bereits in der Datenbank. Würden wir handhaben es genau die gleiche Weise, wenn wir die bereits bestehenden Tabellen in der Datenbank. Da eine Sicht ist eine "virtuelle Tabelle" die Tabelle, in der die syntax der Entity Framework noch funktioniert.
InformationsquelleAutor Al Katawazi
Wenn alles, was Sie wollen, ist ein Bündel von de-normalisiert, Objekte, dann könnten Sie haben gerade eine öffentliche get-nur
IQueryable<TDenormolized>
Eigenschaft in IhremDbContext
Klasse.In der
get
Sie wieder eine Linq-Ergebnis zum Projekt der de-normoalized Werte in Ihren de-normalisierte Objekte. Dies könnte besser sein, als das schreiben einer DB Anzeigen, weil Sie Programmieren, Sie sind nicht begrenzt durch die nur mitselect
Aussagen. Auch ist es compile-Zeit typsicher ist.Nur vorsichtig sein, nicht auslösen Aufzählungen wie
ToList()
fordert, dass eine Unterbrechung verzögerte Abfrage und Sie können am Ende mit dem Erhalt einer Millionen Datensätze wieder aus der Datenbank und filtern Sie diese auf Ihrem Anwendung-server.Ich weiß nicht, ob dies der richtige Weg ist, aber ich habe versucht, und es funktioniert für mich.
Anderen Grund, dies nicht zu tun, könnte die Verwendung von rekursiven common table expressions, die nicht in LINQ. Aber sonst ist eine gute Beratung für einfachere Szenarien.
Mithilfe einer Eigenschaft anstelle einer Ansicht ist nicht eine option, wenn Sie möchten nutzen Sie die Vorteile eines indexed anzeigen.
"Sie sind nicht begrenzt durch die nur mithilfe von select-Anweisungen". Was meinst du damit? Alles, was Sie tun können, mit LINQ kann getan werden, mithilfe von SELECT-Anweisungen, das gleiche kann nicht gesagt werden, für die andere Weise herum.
InformationsquelleAutor oldhouseye
Ich weiß, das ist eine alte Frage, und es gibt viele Antworten hier, aber ich Zwang ein Problem, wenn ich diese Antwort und trat ein Fehler auf, wenn ich mit update-database-Befehl in der Paket-Manager-Konsole:
und ich verwenden Sie diese Schritte, um dieses Problem zu lösen:
hoffe, es hilft.
InformationsquelleAutor Sepehr Estaki