Mit Xamarin.Forms 2.4 ist Xamarin nun .Net Core kompatibel (sogar zu Version 2.0). Das größte Manko, meiner Meinung nach, war bis jetzt die Handhabung der lokalen Daten in einer Datenbank (meist SQLite). Die vorhandenen Bibliotheken (SQLite.Net-PCL und sqlite-net-pcl) sind leider alles andere als entwicklerfreundlich. Zumindest für C#-Entwickler, die vom Desktop-System kommen und Entity Framework 6, NHibernate und weitere kennen.
Nun gibt es mit Entity Framework Core eine Alternative für Xamarin. Der Einstieg ist zwar nicht ganz so einfach, wie mit Entity Framework 6, aber es lohnt sich. Vor allem fehlen bei .Net Core aktuell die Tools (insbesondere visuelle) für die Generierung / Visualisierung und Migration. Das meiste muss über die Kommandozeile gelöst werden.
Mit Xamarin.Forms 2.4 ist Xamarin nun .Net Core kompatibel (sogar zu Version 2.0).
Gehen Sie nun Schritt für Schritt von der Standard-Vorlage für Xamarin.Forms Projekte bis zu einer funktionierenden Umsetzung mit .Net Standard 2.0 und Prism als Navigationshilfe und Dependency Injection Container.
Seit einiger zeit nutze ich FAKE als Build-Script für meine .Net Projekte (nicht nur Privat). Außerdem nutze ich git-flow als Branching-Model für die Entwicklung. Somit erzeuge ich die neuen Versionsnummern beim Beenden von release- und hotfix-Branches. Diese Information will ich nicht jedes mal auch beim CI-Server nachtragen, sondern im Idealfall direkt aus dem jeweiligen Tag ableiten. Dazu habe ich nun ein kleines F# Snippet geschrieben (Link zum Quellcode ist in der Seitenleiste), der mir die Arbeit erleichtert.
Da mein F#-Kenntnisse momentan nur rudimentär sind, ist der Feedback ausdrücklich gewünscht.
Beim direkten Löschen eines Kindselementes aus der Elternelement heraus mit parent.Childs.Remove(child); löscht zwar die Beziehung zwischen den Beiden (Child.Parent = null), aber nicht das Kindselement selbst. Das führt beim Speichern unweigerlich zu einem Fehler, wenn in der Datenbankdefinition das Foreign Key nicht NULL sein darf. In diesem Tutorial zeige ich zwei gangbare Lösungen, wie man dieses Problem umschiffen kann. Hoffentlich wird es bald in EF möglich sein, dieses Verhalten auch als Standard zu konfigurieren.