Ricerca…


Osservazioni

Entity Framework (EF) Core è una versione leggera ed estensibile della popolare tecnologia di accesso ai dati di Entity Framework.

EF Core è un mappatore di oggetti relazionale (O / RM) che consente agli sviluppatori .NET di lavorare con un database utilizzando oggetti .NET. Elimina la necessità della maggior parte del codice di accesso ai dati che gli sviluppatori di solito devono scrivere.

Aggiunta di pacchetti al progetto

Per aggiungere EntityFrameworkCore al progetto, aggiornare il file project.json (aggiungere nuove righe nelle sezioni delle dependencies e degli 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"
}

Non dimenticare di eseguire il dotnet restore per scaricare effettivamente questi pacchetti da Internet.

Se si utilizza un RDBMS diverso da Microsoft SQLServer, sostituire Microsoft.EntityFrameworkCore.SqlServer con la versione corretta ( Microsoft.EntityFrameworkCore.Sqlite , Npgsql.EntityFrameworkCore.PostgreSQL o altro - consultare la documentazione RDBMS per il pacchetto consigliato).

Primo database in Entity Framework Core con una libreria di classi e SQL Server

Okay, mi ci è voluto un giorno per capirlo, quindi sto postando i passi che ho seguito per far funzionare il mio Database in un Class Project (.NET Core) , con un'app Web .NET Core.

Passaggio 1: installare .NET Core

Assicurati di utilizzare .NET Core non DNX (Hint: You should be able to see the .NET Core option when creating a New Project) - Se NON Scarica da qui

Se hai problemi con l'installazione di .NET Core (l'errore è qualcosa come Visual Studio 2015 Update 3 non installato correttamente) - Puoi eseguire l'installazione usando il comando: [ DotNetCore.1.0.0-VS2015Tools.Preview2.exe SKIP_VSU_CHECK=1 ] - Che impedirà l'installazione che esegue il problema di Github di controllo di Visual Studio

inserisci la descrizione dell'immagine qui

Passaggio 2: crea i progetti

Creare una nuova applicazione Web principale ASP.NET -> Quindi selezionare Applicazione Web nella schermata successiva

inserisci la descrizione dell'immagine qui

Aggiungi un progetto di Class Library (.NET Core)

inserisci la descrizione dell'immagine qui

Passaggio 3: installazione dei pacchetti EF

Aprire il file project.json della libreria di classi e incollare quanto segue, quindi salvare il file:

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

Questo dovrebbe ripristinare i pacchetti in References

inserisci la descrizione dell'immagine qui

---------------- O

È possibile installarli utilizzando Nuget Package Manager eseguendo i seguenti comandi nella console di Gestione pacchetti

Install-Package Microsoft.EntityFrameworkCore.SqlServer

Install-Package Microsoft.EntityFrameworkCore.Tools –Pre

Install-Package Microsoft.EntityFrameworkCore.SqlServer.Design

Nota: installare un pacchetto alla volta, se si verifica un errore dopo l'installazione

Microsoft.EntityFrameworkCore.Tools

Quindi modifica il contenuto della tua sezione project.json framework a questo:

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

Passaggio 4: creazione del modello di database

Ora per generare il Database eseguire il seguente comando nella Package Manager Console (NON dimenticare di modificare la stringa di connessione nel database)

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

Questo ti darà l'errore sul progetto di avvio:

inserisci la descrizione dell'immagine qui

Per questo è necessario aggiungere gli stessi riferimenti aggiunti alla Libreria di classi all'app Web .NET

Quindi apri il tuo project.json per l'app Web,

Sotto dependencies , aggiungere:

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

e sotto gli tools aggiungi:

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

Dopo aver effettuato le modifiche, salva il file.

Questo è quello che sembra il mio project.json

inserisci la descrizione dell'immagine qui

Quindi eseguire nuovamente il comando in Package Manager Console rispetto alla libreria di classi:

Se non hai già aggiunto il riferimento della tua libreria di classi all'app Web, riceverai questo errore:

inserisci la descrizione dell'immagine qui

per risolvere questo aggiungi un riferimento della tua biblioteca di classe alla tua app Web:

inserisci la descrizione dell'immagine qui

Finalmente

Esegui nuovamente il comando - nella Package Manager Console :

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

Questo dovrebbe creare le Entità sotto la cartella Modelli, nella libreria delle classi

inserisci la descrizione dell'immagine qui

Passare una stringa di connessione

Nel mio caso, abbiamo un'applicazione multi-tenant, in cui ogni cliente ha il proprio database, ad esempio Client_1, Client_2, Client_3. Quindi la stringa di connessione doveva essere dinamica.

Quindi abbiamo aggiunto una proprietà stringa di connessione a un costruttore e l'abbiamo passata al contesto nel metodo 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);
    }
}

e usato in questo modo:

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

Modello, interrogazione e salvataggio dei dati

Modello

Con EF Core, l'accesso ai dati viene eseguito utilizzando un modello. Un modello è costituito da classi di entità e un contesto derivato che rappresenta una sessione con il database, consentendo di eseguire query e salvare dati.

È possibile generare un modello da un database esistente, codificare manualmente un modello in modo che corrisponda al proprio database o utilizzare EF Migrations per creare un database dal modello (e modificarlo man mano che il modello cambia nel tempo).

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

Interrogazione

Le istanze delle classi di entità vengono recuperate dal database utilizzando Language Integrated Query (LINQ).

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

Salvataggio dei dati

I dati vengono creati, eliminati e modificati nel database utilizzando le istanze delle classi di entità.

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

Eliminazione dei dati

Le istanze delle classi di entità vengono recuperate dal database utilizzando 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();
}

Aggiornamento dei dati

I dati vengono aggiornati nel database utilizzando le istanze delle classi di entità.

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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow