Entity Framework Core Samouczek
Rozpoczęcie pracy z Entity Framework Core
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
Krok 2 - Utwórz projekty
Utwórz nową aplikację internetową ASP.NET Core -> Następnie wybierz aplikację internetową na następnym ekranie
Dodaj projekt Class Library (.NET Core)
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
---------------- 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:
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
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:
aby rozwiązać ten problem, dodaj odwołanie do swojej biblioteki klas do swojej aplikacji internetowej:
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
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();
}








