m4a_X Posted February 23, 2018 Share Posted February 23, 2018 (edited) Hallo allerseits! Ich selber habe lange damit zugebracht zu schauen wie ich EntityFrameworkCore möglichst so nutzen kann wie EF6 (EntityFramework 6). Nach einer langen Zeit auf Google habe ich es mittlerweile auf eine recht einfache Art hinbekommen, die so jeder übernehmen kann. Ich spare mir die meisten Erklärungen, ich zeige die Schritte die ihr anwenden müsst. Inkompatibilität wenn schon andere MySQL Packages installiert sind, kann durchaus vorkommen, bitte vorher löschen. Erster Schritt Ladet folgende NuGet Packages herunter Microsoft.EntityFrameworkCore Microsoft.EntityFrameworkCore.Tools Pomelo.EntityFrameworkCore.MySQL Pomelo.EntityFrameworkCore.MySQL.Designer Der zweite Schritt Jetzt müsst ihr eurer Projekt entladen, und dann die CSProj Datei bearbeiten. Dort fügt ihr einfach folgende zwei Informationen ein: GenerateRuntimeConfigrationFiles ist ein Workaround was den Fehler behebt wenn er beim Datenbank-Model erzeugen den Net.Core nicht finden kann. Tools.DotNet... benötigen wir damit wir (dotnet ef...) nutzen können. <PropertyGroup> <GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles> </PropertyGroup> <ItemGroup> <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0" /> </ItemGroup> Und jetzt der dritte Schritt Jetzt compilieren wir einmal das komplette Projekt (dafür das entladene Projekt wieder laden und dann neu erstellen). Wenn das erfolgreich war, können wir zum nächsten Schritt springen. Falls nicht, alle bisherigen MySQL Funktionen ausklammern, damit wir gleich das Model generieren können, müssen wir einmal compiliert haben. Jetzt der vierte Schritt, zusammgengefasst Wir öffnen jetzt Powershell oder CMD (am besten als Administrator). Jetzt navigieren wir zu unseren Projektfiles (wo die .csproj Datei liegt). Beispiel: "cd C:\Users\Administrator\ragemp_project\proj" Dort führen wir schnell noch einen kleinen Befehl aus - "dotnet restore" Um jetzt die Modelle zu generieren, müssen wir uns einen kleinen Befehl zusammenschreiben. dotnet ef dbcontext scaffold "Host=localhost;Port=3306;Database=vita;Username=root;Password=xxx" Pomelo.EntityFrameworkCore.MySql -o Model -f Hier die richtigen MySQL Daten hinterlegen. Wenn wir das jetzt ausführen, und wir keine Fehler erhalten, müssten im Projekt jetzt die Modelle liegen unter dem Ordner "Model". Wenn ihr Änderungen an der Datenbank durchführt, dann müsst ihr das nochmal ausführen, am besten schreibt ihr dafür eine .bat Datei! Der fünfte Schritt, ein Beispielcode Jetzt haben wir EntityFrameworkCore funktionsfähig in das Projekt integriert. Wir können jetzt auf die Datenbank zugreifen, siehe Beispiel! using System.Linq; using(var db = new Model.databasenameContext()) { var accounts = db.Accounts.FirstOrDefault(x => x.SocialClub == player.SocialClub); // Accounts = Model if(accounts == null) return; // Account wurde nicht gefunden accounts.Online = 1; db.SaveChanges(); } Bei Fragen einfach melden, oder falls ich etwas nicht richtig geschrieben habe einfach bescheid geben! Viel Spaß damit. Mit freundlichen Grüßen, Max Jackson Zitat Der Server startet nicht ohne die richtigen "runtimes", ich habe meinen Runtime-Ordner hochgeladen von der aktuellsten Server-Version (0.3.5) https://mega.nz/#!NJJzmTSa!eINxe4H0fErE6Cod-bt8fazAi4HSXWA4G9APw5d_E6E Bereits existierende Dateien einfach überspringen. Edited February 23, 2018 by m4a_X 2 Link to comment Share on other sites More sharing options...
VegaZ Posted September 16, 2018 Share Posted September 16, 2018 Hallo @m4a_X, ich bin hier so langsam am verzweifeln :/. Ich habe soweit alles am laufen. Wenn ich die Modelle über die Powershell generiere legt er mir die Dateien an, schön und gut. Wenn ich später einen Befehl ausführe um die Datenbank zu aktualisieren funktioniert das ebenfalls (Datenmodelle in C# erstellt und per PowerShell in der Datenbank aktualisieren lassen). Server läuft auch so lange bis ich was in die Datenbank speichern möchte. Hier ein paar Auszüge: Spawn.cs (wenn Spieler spawnt, soll ein Log in der DB erstellt werden) using (var context = new DatabaseContext()) { var user = new Entities.User { Name = player.Name }; context.Users.Add(user); context.SaveChanges(); } Mein DbContext (DatabaseContext.cs) sieht wie folgt aus: public partial class DatabaseContext : DbContext { public DatabaseContext(DbContextOptions options) : base() { } public DatabaseContext() { } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseMySql("mein Connection String"); } protected override void OnModelCreating(ModelBuilder modelBuilder) { } public DbSet<Server.Entities.User> Users { get; set; } public DbSet<Server.Entities.Character> Characters { get; set; } } Ich habe bis hier hin alles nach den offiziellen Anleitungen von Microsoft befolgt. Wenn ich aber jetzt spawne kommt folgende Exception und zwar an der Stelle des zweiten Konstruktors in DatabaseContext.cs: System.IO.FileLoadException: 'Could not load file or assembly 'System.Diagnostics.DiagnosticSource, Version=4.0.3.0, Culture=neutral Could not find or load a specific file. (Exception from HRESULT: 0x80131621)' Wenn ich den zweiten Konstruktor lösche, wird mir die Exception beim Using in Spawn.cs angezeigt. Ich weiß echt nich wo ich was machen muss. Kannst du vielleicht mal einen Einblick in einen DbContext von dir geben, oder mir bitte erklären wo man noch was hinzufügen muss, damit es klappt? Mit freundlichen Grüßen VegaZ Link to comment Share on other sites More sharing options...
m4a_X Posted September 17, 2018 Author Share Posted September 17, 2018 Moin, habe deinen Text nicht ganz gelesen @VegaZ aber dein Problem in der Fehlermeldung ist aufjedenfall das die Datei "System.Diagnostics.DiagnosticSource" nicht in deinem Runtimes Ordner von RageMP (Server) ist. Grüße Link to comment Share on other sites More sharing options...
VegaZ Posted September 17, 2018 Share Posted September 17, 2018 (edited) Hey @m4a_X, aber sie ist drin, das habe ich schon überprüft. Weiß echt nicht was ich noch machen kann. Ich kopiere einfach noch mal alles aus deiner Zip-Datei rüber. Edit: Hilft leider auch nicht. Edit2: Es war nicht die aktuellste Version. Jetzt funktioniert es. Danke trotzdem MfG Edited September 17, 2018 by VegaZ Link to comment Share on other sites More sharing options...
m4a_X Posted September 17, 2018 Author Share Posted September 17, 2018 Kein Problem dafür bin ich da Link to comment Share on other sites More sharing options...
.Neø Posted December 31, 2018 Share Posted December 31, 2018 Hier die Dependencies für 0.3.7 https://www118.zippyshare.com/v/l1PWFuut/file.html Link to comment Share on other sites More sharing options...
Pintex Posted April 26, 2019 Share Posted April 26, 2019 @.NeøKönntest du die Dateien nochmal schicken? Leider kann man auf dem Link nicht mehr zugreifen. Link to comment Share on other sites More sharing options...
Recommended Posts