Condividi tramite


Introduzione a EF Core

In questa esercitazione viene creata un'app console .NET che esegue l'accesso ai dati su un database SQLite usando Entity Framework Core.

È possibile seguire l'esercitazione usando Visual Studio in Windows o usando l'interfaccia della riga di comando di .NET in Windows, macOS o Linux.

Vedere l'esempio di questo articolo in GitHub.

Prerequisites

Installare il seguente software:

Creare un nuovo progetto

dotnet new console -o EFGetStarted
cd EFGetStarted

Installare Entity Framework Core

Per installare EF Core, è necessario installare il pacchetto per il/i provider di database EF Core che si desidera utilizzare. Questa esercitazione usa SQLite perché viene eseguito in tutte le piattaforme supportate da .NET. Per un elenco dei provider disponibili, vedere Provider di database.

dotnet add package Microsoft.EntityFrameworkCore.Sqlite

Creare il modello

Definire una classe di contesto e classi di entità che costituiscono il modello.

  • Nella directory del progetto creare Model.cs con il codice seguente
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;

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

    public string DbPath { get; }

    public BloggingContext()
    {
        var folder = Environment.SpecialFolder.LocalApplicationData;
        var path = Environment.GetFolderPath(folder);
        DbPath = System.IO.Path.Join(path, "blogging.db");
    }

    // The following configures EF to create a Sqlite database file in the
    // special "local" folder for your platform.
    protected override void OnConfiguring(DbContextOptionsBuilder options)
        => options.UseSqlite($"Data Source={DbPath}");
}

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

    public List<Post> Posts { get; } = new();
}

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

EF Core può anche decompilare un modello da un database esistente.

Suggerimento: questa applicazione mantiene intenzionalmente le cose semplici per maggiore chiarezza. Le stringhe di connessione non devono essere archiviate nel codice per le applicazioni di produzione. È anche possibile suddividere ogni classe C# nel proprio file.

Creare il database

La procedura seguente usa le migrazioni per creare un database.

  • Eseguire i comandi seguenti:

    dotnet tool install --global dotnet-ef
    dotnet add package Microsoft.EntityFrameworkCore.Design
    dotnet ef migrations add InitialCreate
    dotnet ef database update
    

    Verrà installato dotnet ef e il pacchetto di progettazione necessario per eseguire il comando in un progetto. Il comando migrations crea uno scheletro di una migrazione per generare il set iniziale di tabelle per il modello. Il database update comando crea il database e applica la nuova migrazione.

Creare, Leggere, Aggiornare & Eliminare

  • Aprire Program.cs e sostituire il contenuto con il codice seguente:

    using System;
    using System.Linq;
    using Microsoft.EntityFrameworkCore;
    
    using var db = new BloggingContext();
    
    // Note: This sample requires the database to be created before running.
    Console.WriteLine($"Database path: {db.DbPath}.");
    
    // Create
    Console.WriteLine("Inserting a new blog");
    db.Add(new Blog { Url = "http://blogs.msdn.com/adonet" });
    await db.SaveChangesAsync();
    
    // Read
    Console.WriteLine("Querying for a blog");
    var blog = await db.Blogs
        .OrderBy(b => b.BlogId)
        .FirstAsync();
    
    // Update
    Console.WriteLine("Updating the blog and adding a post");
    blog.Url = "https://devblogs.microsoft.com/dotnet";
    blog.Posts.Add(
        new Post { Title = "Hello World", Content = "I wrote an app using EF Core!" });
    await db.SaveChangesAsync();
    
    // Delete
    Console.WriteLine("Delete the blog");
    db.Remove(blog);
    await db.SaveChangesAsync();
    

Eseguire l'app

Passaggi successivi