Recherche…


Remarques

Entity Framework (EF) Core est une version légère et extensible de la technologie d'accès aux données populaire d'Entity Framework.

EF Core est un mappeur objet-relationnel (O / RM) qui permet aux développeurs .NET de travailler avec une base de données à l'aide d'objets .NET. Cela élimine le besoin de la plupart du code d'accès aux données que les développeurs doivent généralement écrire.

Ajout de packages au projet

Pour ajouter EntityFrameworkCore à votre projet, mettez à jour le fichier project.json (ajoutez de nouvelles lignes dans les sections des dependencies et des tools ):

"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"
}

N'oubliez pas de lancer dotnet restore pour télécharger ces paquets sur Internet.

Si vous utilisez un SGBDR autre que Microsoft SQLServer - remplacez Microsoft.EntityFrameworkCore.SqlServer par la version correcte ( Microsoft.EntityFrameworkCore.Sqlite , Npgsql.EntityFrameworkCore.PostgreSQL ou autre - consultez la documentation de votre SGBDR pour le package recommandé).

Base de données d'abord dans Entity Framework Core avec une bibliothèque de classes et SQL Server

Bon, il m'a fallu environ une journée pour le comprendre, alors voici les étapes que j'ai suivies pour que ma base de données fonctionne d'abord dans un Class Project (.NET Core) , avec une application Web .NET Core.

Étape 1 - Installation de .NET Core

Assurez - vous que vous utilisez Core .NET ne DNX (Hint: You should be able to see the .NET Core option when creating a New Project) en (Hint: You should be able to see the .NET Core option when creating a New Project) de (Hint: You should be able to see the .NET Core option when creating a New Project) de la (Hint: You should be able to see the .NET Core option when creating a New Project) d' (Hint: You should be able to see the .NET Core option when creating a New Project) - Si pas télécharger à partir ici

Si vous rencontrez des problèmes lors de l’installation de .NET Core (l’erreur est quelque chose comme Visual Studio 2015 Update 3 n’est pas installé correctement) - Vous pouvez exécuter l’installation à l’aide de la commande: [ DotNetCore.1.0.0-VS2015Tools.Preview2.exe SKIP_VSU_CHECK=1 ] Ce qui empêchera l'installation d'effectuer le problème Visual Studio Check Github

entrer la description de l'image ici

Étape 2 - Créer les projets

Créez une nouvelle application Web ASP.NET Core -> Sélectionnez ensuite l'application Web dans l'écran suivant.

entrer la description de l'image ici

Ajouter un projet de Class Library (.NET Core)

entrer la description de l'image ici

Étape 3 - Installation des packages EF

Ouvrez votre fichier project.json de la bibliothèque de classes et collez les éléments suivants, puis enregistrez le fichier:

{
  "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-*"
        }
      }
    }
  }
}

Cela devrait restaurer les paquets sous References

entrer la description de l'image ici

---------------- OU

Vous pouvez les installer à l'aide du gestionnaire de packages Nuget en exécutant les commandes suivantes dans la console du gestionnaire de packages.

Install-Package Microsoft.EntityFrameworkCore.SqlServer

Install-Package Microsoft.EntityFrameworkCore.Tools –Pre

Install-Package Microsoft.EntityFrameworkCore.SqlServer.Design

Remarque: installez un package à la fois - si vous obtenez une erreur après l'installation

Microsoft.EntityFrameworkCore.Tools

Puis changez le contenu de votre section frameworks project.json à ceci:

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

Étape 4 - Création du modèle de base de données

Maintenant, pour générer la base de données, exécutez la commande suivante dans la Package Manager Console (n'oubliez pas de modifier la chaîne de connexion à votre base de données)

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

Cela vous donnera l'erreur sur le projet de démarrage:

entrer la description de l'image ici

Pour cela, vous devez ajouter les mêmes références que vous avez ajoutées à Class Library à l'application Web .NET.

Alors ouvrez votre project.json pour l'application Web,

Sous dependencies , ajoutez:

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

et sous tools ajouter:

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

Après avoir apporté les modifications Enregistrez le fichier.

Voici à quoi ressemble mon projet.json

entrer la description de l'image ici

Ensuite, exécutez à nouveau la commande dans Package Manager Console sur la bibliothèque de classes:

Si vous n'avez pas encore ajouté la référence de votre bibliothèque de classes à l'application Web, vous obtiendrez cette erreur:

entrer la description de l'image ici

pour résoudre cette référence, ajoutez votre bibliothèque de classes à votre application Web:

entrer la description de l'image ici

finalement

Exécutez à nouveau la commande - dans la Package Manager Console :

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

Cela devrait créer le dossier Entités sous Modèles, dans la bibliothèque de classes

entrer la description de l'image ici

Passer une chaîne de connexion

Dans mon cas, nous avons une application multi-locataire dans laquelle chaque client a sa propre base de données, par exemple Client_1, Client_2, Client_3. La chaîne de connexion devait donc être dynamique.

Nous avons donc ajouté une propriété de chaîne de connexion à un constructeur et l' OnConfiguring transmise au contexte dans la méthode 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);
    }
}

et l'a utilisé comme ceci:

    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);
        }
    }

Modèle, interrogation et sauvegarde de données

Modèle

Avec EF Core, l'accès aux données est effectué à l'aide d'un modèle. Un modèle est composé de classes d'entités et d'un contexte dérivé qui représente une session avec la base de données, ce qui vous permet d'interroger et de sauvegarder des données.

Vous pouvez générer un modèle à partir d'une base de données existante, coder manuellement un modèle pour qu'il corresponde à votre base de données ou utiliser EF Migrations pour créer une base de données à partir de votre modèle (et le faire évoluer au fil du temps).

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; }
    }
}

Interroger

Les instances de vos classes d'entités sont extraites de la base de données à l'aide de Language Integrated Query (LINQ).

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

La sauvegarde des données

Les données sont créées, supprimées et modifiées dans la base de données à l'aide d'instances de vos classes d'entités.

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

Suppression de données

Les instances de vos classes d'entités sont extraites de la base de données à l'aide de Language Integrated Query (LINQ).

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

Mise à jour des données

Les données sont mises à jour dans la base de données à l'aide d'instances de vos classes d'entités.

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();
}


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow