Szukaj…


Uwagi

Entity Framework (EF) Core to lekka i rozszerzalna wersja popularnej technologii dostępu do danych Entity Framework.

EF Core to maper obiektowo-relacyjny (O / RM), który umożliwia programistom .NET pracę z bazą danych przy użyciu obiektów .NET. Eliminuje to konieczność korzystania z większości kodu dostępu do danych, który programiści zwykle muszą pisać.

Dodawanie pakietów do projektu

Aby dodać EntityFrameworkCore do swojego projektu, zaktualizuj plik project.json (dodaj nowe linie do sekcji dependencies i 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"
}

Nie zapomnij uruchomić dotnet restore aby faktycznie pobrać te pakiety z Internetu.

Jeśli używasz RDBMS innego niż Microsoft SQLServer - zamień Microsoft.EntityFrameworkCore.SqlServer na poprawną wersję ( Microsoft.EntityFrameworkCore.Sqlite , Npgsql.EntityFrameworkCore.PostgreSQL lub inną - zajrzyj do dokumentacji RDBMS w celu uzyskania zalecanego pakietu).

Najpierw baza danych w Entity Framework Core z biblioteką klas i programem SQL Server

Ok, zajęło mi to około dnia, aby to rozgryźć, więc zamieszczam kroki, które postąpiłem, aby moja baza danych najpierw pracowała w Class Project (.NET Core) z aplikacją .NET Core.

Krok 1 - Zainstaluj .NET Core

Upewnij się, że używasz .NET Core, a nie DNX (Hint: You should be able to see the .NET Core option when creating a New Project) - jeśli NIE jest pobierana stąd

Jeśli masz problemy z instalacją .NET Core (Błąd jest podobny do Visual Studio 2015 Update 3 nieprawidłowo zainstalowany) - Możesz uruchomić instalację za pomocą polecenia: [ DotNetCore.1.0.0-VS2015Tools.Preview2.exe SKIP_VSU_CHECK=1 ] - Co uniemożliwi instalację wykonującą problem Visual Studio Check Github

wprowadź opis zdjęcia tutaj

Krok 2 - Utwórz projekty

Utwórz nową aplikację internetową ASP.NET Core -> Następnie wybierz aplikację internetową na następnym ekranie

wprowadź opis zdjęcia tutaj

Dodaj projekt Class Library (.NET Core)

wprowadź opis zdjęcia tutaj

Krok 3 - Instalowanie pakietów EF

Otwórz plik project.json biblioteki klas i wklej następujące elementy, a następnie zapisz plik:

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

To powinno przywrócić pakiety pod References

wprowadź opis zdjęcia tutaj

---------------- LUB

Możesz je zainstalować za pomocą Menedżera pakietów Nuget, uruchamiając następujące polecenia w konsoli Menedżera pakietów

Install-Package Microsoft.EntityFrameworkCore.SqlServer

Install-Package Microsoft.EntityFrameworkCore.Tools –Pre

Install-Package Microsoft.EntityFrameworkCore.SqlServer.Design

Uwaga: Zainstaluj jeden pakiet na raz - jeśli po instalacji pojawi się błąd

Microsoft.EntityFrameworkCore.Tools

Następnie zmień treść sekcji frameworka project.json na:

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

Krok 4 - Tworzenie modelu bazy danych

Teraz, aby wygenerować bazę danych, uruchom następującą komendę w Package Manager Console (NIE zapomnij zmienić parametru połączenia na bazę danych)

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

To da ci błąd dotyczący uruchamiania projektu:

wprowadź opis zdjęcia tutaj

W tym celu musisz dodać te same odniesienia, które dodałeś do Biblioteki klas do aplikacji .NET Web

Otwórz więc project.json dla aplikacji sieci Web,

W dependencies dodaj:

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

i pod tools dodaj:

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

Po wprowadzeniu zmian Zapisz plik.

Tak wygląda mój project.json

wprowadź opis zdjęcia tutaj

Następnie ponownie uruchom polecenie w konsoli Menedżera pakietów dla biblioteki klas:

Jeśli nie dodałeś jeszcze odwołania do swojej biblioteki klas do aplikacji sieci Web, pojawi się ten błąd:

wprowadź opis zdjęcia tutaj

aby rozwiązać ten problem, dodaj odwołanie do swojej biblioteki klas do swojej aplikacji internetowej:

wprowadź opis zdjęcia tutaj

Wreszcie

Uruchom ponownie polecenie - w Package Manager Console :

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

To powinno utworzyć Encje w folderze Modele w bibliotece klas

wprowadź opis zdjęcia tutaj

Przekazywanie ciągu połączenia

W moim przypadku mamy tutaj aplikację dla wielu najemców, w której każdy klient ma własną bazę danych, np. Client_1, Client_2, Client_3. Dlatego ciąg połączenia musiał być dynamiczny.

Dodaliśmy więc właściwość ciągu połączenia do konstruktora i przekazaliśmy ją do kontekstu w metodzie 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);
    }
}

i używał tego w następujący sposób:

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

Model, zapytania i zapisywanie danych

Model

Dzięki EF Core dostęp do danych odbywa się za pomocą modelu. Model składa się z klas encji i kontekstu pochodnego, który reprezentuje sesję z bazą danych, umożliwiając wyszukiwanie i zapisywanie danych.

Możesz wygenerować model z istniejącej bazy danych, ręcznie kodować model w celu dopasowania do bazy danych lub użyć EF Migracje, aby utworzyć bazę danych z modelu (i ewoluować wraz ze zmianami modelu w czasie).

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

Zapytanie

Instancje klas jednostek są pobierane z bazy danych przy użyciu zintegrowanego zapytania językowego (LINQ).

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

Zapisywanie danych

Dane są tworzone, usuwane i modyfikowane w bazie danych przy użyciu instancji klas jednostek.

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

Usuwanie danych

Instancje klas jednostek są pobierane z bazy danych przy użyciu zintegrowanego zapytania językowego (LINQ).

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

Aktualizowanie danych

Dane są aktualizowane w bazie danych przy użyciu instancji klas jednostek.

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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow