Looking for entity-framework-core Keywords? Try Ask4Keywords

Entity Framework CoreErste Schritte mit Entity Framework Core


Bemerkungen

Entity Framework (EF) Core ist eine leichtgewichtige und erweiterbare Version der bekannten Entity Framework-Datenzugriffstechnologie.

EF Core ist ein objektrelationaler Mapper (O / RM), mit dem .NET-Entwickler mit .NET-Objekten mit einer Datenbank arbeiten können. Dadurch entfällt der größte Teil des Datenzugriffscodes, den Entwickler normalerweise schreiben müssen.

Pakete zum Projekt hinzufügen

Um EntityFrameworkCore zu Ihrem Projekt hinzuzufügen, aktualisieren Sie die Datei project.json (fügen Sie den Abschnitten dependencies und tools neue Zeilen hinzu):

"dependencies": {
    ...
    "Microsoft.EntityFrameworkCore.SqlServer": "1.0.0",
    "Microsoft.EntityFrameworkCore.SqlServer.Design": "1.0.0",
    "Microsoft.EntityFrameworkCore.Design": {
      "version": "1.0.0",
      "type": "build"
    },
},
"tools": {
    ...
    "Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final"
}

Vergessen Sie nicht, dotnet restore um diese Pakete tatsächlich aus dem Internet herunterzuladen.

Wenn Sie ein anderes RDBMS als Microsoft SQLServer verwenden, ersetzen Sie Microsoft.EntityFrameworkCore.SqlServer durch die richtige Version ( Microsoft.EntityFrameworkCore.Sqlite , Npgsql.EntityFrameworkCore.PostgreSQL oder anderes). RDBMS-Dokumentation enthält das empfohlene Paket.

Datenbank zuerst in Entity Framework Core mit einer Klassenbibliothek und SQL Server

Okay, ich habe ungefähr einen Tag gebraucht, um das herauszufinden. Ich poste hier die Schritte, die ich unternommen habe, um meine Datenbank zuerst in einem Class Project (.NET Core) mit einer .NET Core Web App zu arbeiten.

Schritt 1 - Installieren Sie .NET Core

Stellen Sie sicher, dass Sie .NET Core und nicht DNX verwenden (Hint: You should be able to see the .NET Core option when creating a New Project) angezeigt werden. (Hint: You should be able to see the .NET Core option when creating a New Project) - Wenn NICHT von hier heruntergeladen werden

Wenn Sie Probleme bei der Installation von .NET Core haben (der Fehler ist in etwa Visual Studio 2015 Update 3 nicht korrekt installiert) - Sie können die Installation mit dem Befehl DotNetCore.1.0.0-VS2015Tools.Preview2.exe SKIP_VSU_CHECK=1 : [ DotNetCore.1.0.0-VS2015Tools.Preview2.exe SKIP_VSU_CHECK=1 ] - Dadurch wird verhindert, dass die Installation das Visual Studio Check Github-Problem ausführt

Geben Sie hier die Bildbeschreibung ein

Schritt 2 - Erstellen Sie die Projekte

Erstellen Sie eine neue ASP.NET Core-Webanwendung -> Wählen Sie dann im nächsten Bildschirm Webanwendung aus

Geben Sie hier die Bildbeschreibung ein

Fügen Sie ein Class Library (.NET Core) -Projekt hinzu

Geben Sie hier die Bildbeschreibung ein

Schritt 3 - EF-Pakete installieren

Öffnen Sie die Datei project.json der Klassenbibliothek, fügen Sie Folgendes ein und speichern Sie die Datei:

{
  "version": "1.0.0-*",

  "dependencies": {
    "Microsoft.EntityFrameworkCore.SqlServer": "1.0.0",
    "Microsoft.EntityFrameworkCore.SqlServer.Design": "1.0.0",
    "Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final",
    "NETStandard.Library": "1.6.0"
  },
  "tools": {
    "Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final"
  },

  "frameworks": {
    "net46": {
    },
    "netcoreapp1.0": {
      "dependencies": {
        "Microsoft.NETCore.App": {
          "type": "platform",
          "version": "1.0.0-*"
        }
      }
    }
  }
}
 

Dies sollte die Pakete unter References wiederherstellen

Geben Sie hier die Bildbeschreibung ein

---------------- ODER

Sie können sie mit Nuget Package Manager installieren, indem Sie die folgenden Befehle in der Package Manager Console ausführen

Install-Package Microsoft.EntityFrameworkCore.SqlServer

Install-Package Microsoft.EntityFrameworkCore.Tools –Pre

Install-Package Microsoft.EntityFrameworkCore.SqlServer.Design
 

Hinweis: Installieren Sie jeweils ein Paket - wenn Sie nach der Installation einen Fehler erhalten

Microsoft.EntityFrameworkCore.Tools
 

Ändern Sie dann den Inhalt Ihres project.json Frameworks-Abschnitts folgendermaßen:

  "frameworks": {
    "net46": {
    },
    "netcoreapp1.0": {
      "dependencies": {
        "Microsoft.NETCore.App": {
          "type": "platform",
          "version": "1.0.0-*"
        }
      }
    }
  }
 

Schritt 4 - Erstellen des Datenbankmodells

Um die Datenbank zu generieren, führen Sie den folgenden Befehl in der Package Manager Console (vergessen Sie NICHT, die Verbindungszeichenfolge in Ihrer Datenbank zu ändern).

Scaffold-DbContext "Server=. ; Database=DATABASE; user id= USER ; password = PASSWORD;" Microsoft.EntityFrameworkCore.SqlServer
 

Dies gibt Ihnen den Fehler beim Startprojekt:

Geben Sie hier die Bildbeschreibung ein

Dazu müssen Sie die gleichen Referenzen hinzufügen, die Sie der .NET-Web-App zur Klassenbibliothek hinzugefügt haben

Öffnen Sie also Ihre project.json für die Web App,

Fügen Sie unter dependencies Folgendes hinzu:

"Microsoft.EntityFrameworkCore.SqlServer": "1.0.0",
"Microsoft.EntityFrameworkCore.SqlServer.Design": "1.0.0",
"Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final",
 

und unter tools hinzufügen:

"Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final",
 

Nachdem Sie die Änderungen vorgenommen haben, speichern Sie die Datei.

So sieht mein project.json aus

Geben Sie hier die Bildbeschreibung ein

Führen Sie dann erneut den Befehl in Package Manager Console für die Klassenbibliothek aus:

Wenn Sie der Webanwendung noch nicht den Verweis Ihrer Klassenbibliothek hinzugefügt haben, wird diese Fehlermeldung angezeigt:

Geben Sie hier die Bildbeschreibung ein

So lösen Sie diese Referenz Ihrer Klassenbibliothek für Ihre Webanwendung:

Geben Sie hier die Bildbeschreibung ein

Endlich

Führen Sie den Befehl erneut aus - in der Package Manager Console :

Scaffold-DbContext "Server=. ; Database=DATABASE; user id= USER ; password = PASSWORD;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models
 

Dadurch sollten die Entitäten unter "Modelle" in der Klassenbibliothek erstellt werden

Geben Sie hier die Bildbeschreibung ein

Verbindungszeichenfolge übergeben

In meinem Fall haben wir hier eine Multi-Tenant-Anwendung, in der jeder Kunde eine eigene Datenbank hat, z. B. Client_1, Client_2, Client_3. Die Verbindungszeichenfolge musste also dynamisch sein.

Daher haben wir einem Konstruktor eine Verbindungszeichenfolge-Eigenschaft hinzugefügt und diese in der OnConfiguring Methode an Context OnConfiguring

public partial class ClientContext
{
    private readonly string _connectionString;

    public ClientContext(string connectionString) : base()
    {
        _connectionString = connectionString;
    }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlServer(_connectionString);
    }
}
 

und benutzte es so:

    public void TestConnection()
    {
        var clientId = 1;

        var connectionString = string.Format("Server=192.168.0.211; Database=Client_{0}; user id= USER; password = PWD;", clientId);

        using (var clientContext = new ClientContext(connectionString))
        {
            var assets = clientContext.Users.Where(s => s.UserId == 1);
        }
    }
 

Modellieren, Abfragen und Speichern von Daten

Modell

Mit EF Core erfolgt der Datenzugriff über ein Modell. Ein Modell besteht aus Entitätsklassen und einem abgeleiteten Kontext, der eine Sitzung mit der Datenbank darstellt und die Abfrage und Speicherung von Daten ermöglicht.

Sie können ein Modell aus einer vorhandenen Datenbank generieren, ein Modell für die Anpassung an Ihre Datenbank handcodieren oder EF Migrations verwenden, um eine Datenbank aus Ihrem Modell zu erstellen (und es mit der Zeit zu entwickeln, wenn sich Ihr Modell ändert).

using Microsoft.EntityFrameworkCore;
using System.Collections.Generic;

namespace Intro
{
    public class BloggingContext : DbContext
    {
        public DbSet<Blog> Blogs { get; set; }
        public DbSet<Post> Posts { get; set; }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=MyDatabase;Trusted_Connection=True;");
        }
    }

    public class Blog
    {
        public int BlogId { get; set; }
        public string Url { get; set; }

        public List<Post> Posts { get; set; }
    }

    public class Post
    {
        public int PostId { get; set; }
        public string Title { get; set; }
        public string Content { get; set; }

        public int BlogId { get; set; }
        public Blog Blog { get; set; }
    }
}
 

Abfragen

Instanzen Ihrer Entitätsklassen werden mit LINQ (Language Integrated Query) aus der Datenbank abgerufen.

using (var db = new BloggingContext())
{
    var blogs = db.Blogs
        .Where(b => b.Rating > 3)
        .OrderBy(b => b.Url)
        .ToList();
}
 

Daten speichern

Daten werden in der Datenbank mithilfe von Instanzen Ihrer Entitätsklassen erstellt, gelöscht und geändert.

using (var db = new BloggingContext())
{
    var blog = new Blog { Url = "http://sample.com" };
    db.Blogs.Add(blog);
    db.SaveChanges();
}
 

Daten löschen

Instanzen Ihrer Entitätsklassen werden mit LINQ (Language Integrated Query) aus der Datenbank abgerufen.

using (var db = new BloggingContext())
{
    var blog = new Blog { Url = "http://sample.com" };
    db.Blogs.Attach(blog);
    db.Blogs.Remove(blog);
    db.SaveChanges();
}
 

Daten aktualisieren

Daten werden in der Datenbank mithilfe von Instanzen Ihrer Entitätsklassen aktualisiert.

using (var db = new BloggingContext())
{
    var blog = new Blog { Url = "http://sample.com" };
    var entity = db.Blogs.Find(blog);
    entity.Url = "http://sample2.com";
    db.SaveChanges();
}