1. Wprowadzenie do ASP.NET
  2. Szybki start
  3. Struktura projektu
  4. Tworzenie kontrolerów i akcji
  5. Routing
  6. Modelowanie danych
  7. Widoki RazorViewEngine i TagHelpers
  8. Dostęp do danych
  9. Middleware
  10. Implementacja uwierzytelnienia
  11. Obsługa błędów
  12. Stylowanie aplikacji
  13. Implementacja serwisów RESTful
  14. Implementacja WebSocketów
  15. Testowanie aplikacji
  16. Debugowanie aplikacji
  17. Wdrażanie aplikacji
  18. Integracja z innymi technologiami
  19. Podsumowanie

Entity Framework Core i SQL Server

Aby uzyskać dostęp do danych w aplikacji ASP.NET Core, można wykorzystać Entity Framework Core i bazę danych SQL Server. Entity Framework Core to narzędzie ORM (Object-Relational Mapping), które umożliwia łatwe mapowanie obiektów C# na rekordy w bazie danych. W połączeniu z bazą danych SQL Server można uzyskać łatwy i wydajny dostęp do danych z poziomu aplikacji.

Kroki do rozpoczęcia korzystania z Entity Framework Core:

1. Zainstaluj bibliotekę Entity Framework Core za pomocą menedżera pakietów NuGet:

												
Install-Package Microsoft.EntityFrameworkCore
												
 										

2. Zainstaluj bibliotekę dla bazy danych SQL Server za pomocą menedżera pakietów NuGet:

								
Install-Package Microsoft.EntityFrameworkCore.SqlServer
								
						

3. Utwórz klasę dziedziczącą po klasie DbContext, która będzie reprezentować kontekst bazy danych. Kontekst bazy danych zawiera definicje tabel i relacji między nimi.

												
public class MyDbContext : DbContext
{
  public MyDbContext(DbContextOptions<MyDbContext> options) : base(options)
  {
          /..
  }

  public DbSet<Product> Products { get; set; }
}
												
 										

4. Skonfiguruj połączenie z bazą danych w pliku appsettings.json:

 										
"ConnectionStrings": {
    "MyDbContext": "Server=(localdb)\\mssqllocaldb;Database=MyDatabase;Trusted_Connection=True;"
}
 										
								

5. Zarejestruj kontekst bazy danych w serwisach aplikacji w pliku Startup.cs:

								
public void ConfigureServices(IServiceCollection services)
{
  services.AddDbContext<MyDbContext>(options =>
      options.UseSqlServer(Configuration.GetConnectionString("MyDbContext")));
}
								
						

6. Aby wykonywać zapytania do bazy danych, utwórz repozytorium, które będzie wykorzystywać kontekst bazy danych do wykonywania operacji CRUD (Create, Read, Update, Delete).

								
public class ProductRepository
{
  private readonly MyDbContext _dbContext;

  public ProductRepository(MyDbContext dbContext)
  {
      _dbContext = dbContext;
  }

  public async Task<List<Product>> GetAll()
  {
      return await _dbContext.Products.ToListAsync();
  }

  public async Task<Product> GetById(int id)
  {
      return await _dbContext.Products.FirstOrDefaultAsync(p => p.Id == id);
  }

  public async Task Add(Product product)
  {
      await _dbContext.Products.AddAsync(product);
      await _dbContext.SaveChangesAsync();
  }

  public async Task Update(Product product)
  {
      _dbContext.Products.Update(product);
      await _dbContext.SaveChangesAsync();
  }

  public async Task Delete(int id)
  {
      var product = await GetById(id);
      _dbContext.Products.Remove(product);
      await _dbContext.SaveChangesAsync();
  }
}
								
						

Kod do podstawowych operacji CRUD w Entity Framework Core z bazą danych SQL Server:

								
// utworzenie nowego obiektu DbContext
using var context = new MyDbContext();


// dodanie nowego obiektu do bazy danych
var newEntity = new MyEntity { Name = "Saly", Age = 30 };
context.MyEntities.Add(newEntity);
context.SaveChanges();


// pobranie danych z bazy danych
var entities = context.MyEntities.Where(e => e.Age > 25).ToList();


// edycja istniejącego obiektu
var entityToUpdate = context.MyEntities.FirstOrDefault(e => e.Name == "Saly");
if (entityToUpdate != null)
{
    entityToUpdate.Age = 31;
    context.SaveChanges();
}


// usunięcie istniejącego obiektu
var entityToDelete = context.MyEntities.FirstOrDefault(e => e.Name == "Saly");
if (entityToDelete != null)
{
    context.MyEntities.Remove(entityToDelete);
    context.SaveChanges();
}
								
						
Wyjaśnienie

W powyższym kodzie MyDbContext jest klasą dziedziczącą z DbContext, a MyEntity to klasa reprezentująca tabelę w bazie danych. Zapytania do bazy danych są wykonywane za pomocą LINQ, a metoda SaveChanges służy do zapisywania zmian w bazie danych.