2015-04-26 7 views
8

Aufgrund der Anwesenheit von type providers für den Zugriff auf SQL-Daten in F #, gibt es nicht viel Fokus auf die Verwendung von ORMs, Mikro oder anders. Ich kann definitiv die Logik dahinter sehen.Verwalten von SQL-Schema in F #

Es scheint auch, dass viele Beispiele für die Verwendung von F # zum Spielen mit relationalen Daten darin besteht, sie in bestehende große Datenbanken zu stecken, die anderswo zu erstellen scheinen.

Es fühlt sich an, als gäbe es hier eine kleine Lücke: Gibt es eine nette Möglichkeit, Schema-Erstellung und -Migration direkt aus F # zu verwalten? Das oben verlinkte Beispiel schlägt vor, das Skript zum manuellen Erstellen von Schemas als ersten Schritt auszuführen. Ist das die einzige Option?

Ich habe vor kurzem ein kleines Projekt angefangen, das von Anfang an F # ist, und ich versuche, einige Daten in einer relationalen Datenbank (sqlite für jetzt) ​​zu speichern. Ich habe kein existierendes Schema zu erforschen, ich entwerfe von Grund auf neu. Gibt es eine freundlichere oder idiomatischere Art, mein Schema (Erstellung und dann Migration) in F # zu verwalten?

Antwort

4

Sie können/Entity Framework mit F # verwenden und erhalten daher die Migrations-API, mit der es kommt, aber ich habe es sehr schmerzhaft in der Praxis gefunden - alle Ihre Entity-Klassen benötigen member val get set Style-Eigenschaften (glaube ich) und verschiedene andere Kleinigkeiten. Jamie Dixon hat vor einigen Monaten einen Blog-Eintrag dazu gemacht, als ich gerade damit experimentierte - mir hat es nicht gefallen!

Um ehrlich zu sein, obwohl dies keine gute Antwort für Sie ist, was Sie fragen, zB DB-Schema-Management in F # - ich würde empfehlen, dass Sie etwas VS Database-Projekte verwenden, um Ihr Schema außerhalb Ihrer zu verwalten Code, und verwenden Sie (ja) einen der SQL-Typ-Provider, um Daten innerhalb Ihrer Anwendung zu verwalten.

Wenn Sie ein "Schemamigration in Code" System verwenden, spielt EF nach meiner Erfahrung viel besser mit C#, so dass Sie theoretisch mit z. Ein C#/EF-Datenzugriffsprojekt, auf das von Ihrem F # -Anwendungscode verwiesen wird.

Entschuldigung.

+0

Ich dachte nicht einmal so weit voraus wie Migration, gerade jetzt bin ich nur neugierig auf die Erstellung von Datenbankobjekten. Ich hatte einen ähnlichen Weg eingeschlagen, wie Sie vorschlagen, obwohl in meinem Fall ServiceStack.Ormlite versucht hatte. Für den Dialekt-Support allein scheint es eine lohnende "überflüssige" Investition zu sein. –

+0

Entschuldigung - wenn ich "Migration" sagte, bezog ich mich auf die Fähigkeit von EF, ein SQL-Schema basierend auf einer Reihe von OO-Beziehungen zu generieren. –

+0

Oh meinst du 'migrieren Klassenstruktur zu einer Schemadefinition', nicht 'migrieren Datenbankschema Version 1 zu 2'? Kein Problem. Wie auch immer, ich hatte gehofft, dass ich ein "hey check out this awesome blog post/nugget package" ausspucken könnte, aber es hört sich so an, als existiere es einfach nicht. –

0

Ich habe versucht, eine Lösung dafür zu finden, und ich bin mehr und mehr geneigt zu versuchen, auf die Grundlagen zurückzugreifen, wenn es um SQL-Datenbanken geht. Einer der Hauptteile, die in dem Buch Refactoring Databases beschrieben sind, sind Migrationen. Ein Tool, das das Arbeiten mit Migrationen unterstützt, löst viele Probleme, solange Sie akzeptieren können, dass alle Skripte in einfacher SQL geschrieben werden, wäre wahrscheinlich sehr geeignet.

Ein Tool, das ich für den .NET-Stack gefunden habe, ist Rob Reynolds Roundhouse. Ich muss es noch ausprobieren, aber es scheint vielversprechend, wenn auch etwas veraltet.