Bölüm 2, ASP.NET Core'da Razor bir Pages uygulamasına model ASP.NET Core

Gönderen Rick Anderson

Bu öğreticide, bir veritabanında film yönetimi için sınıflar eklenmiştir. Uygulamanın model sınıfları veritabanıyla Entity Framework Core (EF Core) kullanır. EF Core, veri erişimini basitleştiren bir nesne ilişkisel eşleyicidir (O/RM). Önce model sınıflarını yazarsınız ve EF Core oluşturur.

Model sınıfları POCO sınıfları ("P lain-O ld C LR O'dan") olarak bilinir çünkü bu sınıfların bir EF Core. Veritabanında depolanan verilerin özelliklerini tanımlar.

Veri modeli ekleme

  1. Bu Çözüm Gezgini, Razor PagesMovie projesine sağ tıklayın ve > Klasör > Ekle'ye tıklayın. Klasöre Models adını girin.

  2. Modeller klasörüne sağ tıklayın. Sınıf Ekle'yi > seçin. Sınıfa Film adını girin.

  3. Sınıfına aşağıdaki özellikleri Movie ekleyin:

    using System.ComponentModel.DataAnnotations;
    
    namespace RazorPagesMovie.Models
    {
        public class Movie
        {
            public int ID { get; set; }
            public string Title { get; set; } = string.Empty;
    
            [DataType(DataType.Date)]
            public DateTime ReleaseDate { get; set; }
            public string Genre { get; set; } = string.Empty;
            public decimal Price { get; set; }
        }
    }
    

sınıfı Movie şunları içerir:

  • alanı, ID birincil anahtar için veritabanı tarafından gereklidir.

  • Özelliğin veri türünü belirten bir [DataType] ReleaseDate özniteliği. Bu öznitelikle:

    • Kullanıcının tarih alanına saat bilgilerini girmesi gerekmez.
    • Saat bilgileri değil yalnızca tarih görüntülenir.

DataAnnotations sonraki bir öğreticide ele atılır.

Derleme hatası olmadığını doğrulamak için projeyi derle.

Film modelinin iskelesi

Bu bölümde, film modeli iskelesi vardır. Yani yapı iskelesi aracı, film modeli için Oluşturma, Okuma, Güncelleştirme ve Silme (CRUD) işlemlerine yönelik sayfalar üretir.

  1. Yapı NuGet Microsoft.EntityFrameworkCore.Design için gerekli olan uygulama paketini ekleyin.

    1. Araçlar menüsünden Çözüm paketleri için NuGet Paket Yöneticisi Paketleri NuGet Yönet - > yönet'i  NuGet Paket Yöneticisi seçin
    2. Gözat sekmesini seçin.
    3. Önkeser dahil edin'i denetleme
    4. Girin Microsoft.EntityFrameworkCore.Design ve listeden seçin.
    5. Denetim Project yükle'yi seçin
    6. Lisans Kabulü iletişim kutusunda Kabul Ediyorum'a seçin. NuGet Paket Yöneticisi - paket ekleme
  2. Sayfalar/Filmler klasörünü oluşturun:

    1. Sayfalar klasörüne sağ tıklayın ve yeni > > Ekle'ye tıklayın.
    2. Klasöre Movies adını girin.
  3. Sayfalar/Filmler klasörüne sağ tıklayın ve yeni > > Ekle'ye tıklayın.

    Yeni İskeleLi Öğe

  4. Yeni İskele Ekle iletişim kutusunda, Ekle 'yi Razor (CRUD) Entity Framework Sayfalar'ı > seçin.

    yapı iskelesi ekleme

  5. Entity Framework Razor (CRUD) iletişim kutusunu kullanarak Sayfa Ekle'yi tamamlama:

    1. Model sınıfı açılan listesinde Film ( Razor SayfalarMovie.Models) öğesini seçin.
    2. Veri bağlamı sınıf satırına + (artı) işareti seçin.
      1. Veri Bağlamı Ekle iletişim kutusunda sınıf RazorPagesMovie.Data.RazorPagesMovieContext adı oluşturulur.
    3. Add (Ekle) seçeneğini belirleyin.

    Razor Pages ekleme

    Paketi yüklemenizin gerekli olduğunu söyleyen bir hata iletisi alırsanız Yeni İskele Öğesi Ekle ile Microsoft.EntityFrameworkCore.SqlServer > başlayan adımları tekrarlayın.

Dosya, appsettings.json yerel veritabanına bağlanmak için kullanılan bağlantı dizesiyle güncelleştirilir.

Oluşturulan ve güncellenen dosyalar

Yapı iskelesi işlemi aşağıdaki dosyaları oluşturur:

  • Sayfalar/filmler: oluşturma, silme, ayrıntılar, düzenleme ve Index .
  • Veri/ Razor pagesmoviecontext. cs

Oluşturulan dosyalar bir sonraki öğreticide açıklanmaktadır.

İskele işlemi, program. cs dosyasına aşağıdaki vurgulanmış kodu ekler:

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using RazorPagesMovie.Data;
var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();

builder.Services.AddDbContext<RazorPagesMovieContext>(options => 
       options.UseSqlServer(builder.Configuration.GetConnectionString("RazorPagesMovieContext")));

var app = builder.Build();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseDeveloperExceptionPage();
}
else
{
    app.UseExceptionHandler("/Error");
    // The default HSTS value is 30 days. You may want to change this for production
    // scenarios, see https://aka.ms/aspnetcore-hsts.
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapRazorPages();

app.Run();

Program. cs değişiklikleri Bu öğreticinin ilerleyen kısımlarında açıklanmıştır.

EF 'in geçiş özelliğini kullanarak ilk veritabanı şemasını oluşturma

Entity Framework Core geçiş özelliği şunları yapmak için bir yol sağlar:

  • İlk veritabanı şemasını oluşturun.
  • Veritabanı şemasını uygulamanın veri modeliyle eşitlenmiş halde tutmak için artımlı olarak güncelleştirin. Veritabanındaki mevcut veriler korunur.

bu bölümde, Paket Yöneticisi konsolu (PMC) penceresi şu şekilde kullanılır:

  • İlk geçiş ekleyin.
  • Veritabanını ilk geçişle güncelleştirin.
  1. araçlar menüsünde, NuGet Paket Yöneticisi > Paket Yöneticisi konsolunu seçin.

    PMC menüsü

  2. PMC 'de aşağıdaki komutları girin:

    Add-Migration InitialCreate
    Update-Database
    
    

SQL Server için yukarıdaki komutlar aşağıdaki uyarıyı oluşturur:

' Movie ' varlık türündeki ' Price ' ondalık sütunu için tür belirtilmedi. Bu, varsayılan duyarlık ve ölçeğe uygun olmadıkları takdirde değerlerin sessizce kesilmesine neden olur. ' hasccolumntype () ' kullanarak tüm değerleri barındırabilecek SQL sunucusu sütun türünü açıkça belirtin.

Daha sonraki bir adımda değinilecek şekilde uyarıyı yoksayın.

migrationsKomut, ilk veritabanı şemasını oluşturmak için kod üretir. Şema, içinde belirtilen modeli temel alır DbContext . InitialCreateBağımsız değişken, geçişleri adlandırmak için kullanılır. Herhangi bir ad kullanılabilir, ancak geçiş işlemini açıklayan bir ad seçilir.

updateKomutu Up uygulanmamış geçişlerde yöntemini çalıştırır. Bu durumda, update Up veritabanını oluşturan geçişler/ <time-stamp> _InitialCreate. cs dosyasında yöntemini çalıştırır.

Bağımlılık ekleme ile kaydedilen bağlamı inceleyin

ASP.NET Core bağımlılık eklemeile oluşturulmuştur. EF Core veritabanı bağlamı gibi hizmetler, uygulamanın başlatılması sırasında bağımlılık ekleme ile kaydedilir. Bu hizmetleri gerektiren bileşenler (örneğin, Razor Sayfalar), Oluşturucu parametreleri aracılığıyla sağlanır. Bir veritabanı bağlamı örneğini alan Oluşturucu kodu öğreticide daha sonra gösterilmiştir.

Scafkatlama aracı otomatik olarak bir veritabanı bağlamı oluşturup bağımlılık ekleme kapsayıcısına kaydettirdi. Aşağıdaki vurgulanan kod, scaffolder tarafından program. cs dosyasına eklenir:

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using RazorPagesMovie.Data;
var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();

builder.Services.AddDbContext<RazorPagesMovieContext>(options => 
       options.UseSqlServer(builder.Configuration.GetConnectionString("RazorPagesMovieContext")));

var app = builder.Build();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseDeveloperExceptionPage();
}
else
{
    app.UseExceptionHandler("/Error");
    // The default HSTS value is 30 days. You may want to change this for production
    // scenarios, see https://aka.ms/aspnetcore-hsts.
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapRazorPages();

app.Run();

Veri bağlamı RazorPagesMovieContext :

  • Microsoft. EntityFrameworkCore. DbContextöğesinden türetilir.
  • Veri modeline hangi varlıkların ekleneceğini belirtir.
  • Model için oluşturma, okuma, güncelleştirme ve silme gibi EF Core işlevlerini koordine eder Movie .
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using RazorPagesMovie.Models;

namespace RazorPagesMovie.Data
{
    public class RazorPagesMovieContext : DbContext
    {
        public RazorPagesMovieContext (DbContextOptions<RazorPagesMovieContext> options)
            : base(options)
        {
        }

        public DbSet<RazorPagesMovie.Models.Movie> Movie { get; set; }
    }
}

Önceki kod, varlık kümesi için bir Dbset <Movie> özelliği oluşturur. Entity Framework terminolojisinde, genellikle bir varlık kümesi bir veritabanı tablosuna karşılık gelir. Bir varlık, tablodaki bir satıra karşılık gelir.

Bağlantı dizesinin adı, Dbcontextoptions nesnesinde bir yöntem çağırarak bağlama geçirilir. Yerel geliştirme için yapılandırma sistemi , bağlantı dizesini appsettings.json dosyadan okur.

Uygulamayı oluşturma

Uygulamayı oluşturun. Derleyici birkaç uyarı oluşturur nullable . daha fazla bilgi için bu GitHub sorunu ve null yapılabilir başvuru türlerini inceleyin.

Uyarı iletilerini çözme

Bu bölümde, null yapılabilir uyarıları devre dışı bırakabilir veya yapı iskelesi kodunu giderebilirsiniz. Null yapılabilir başvuru türlerinden gelen uyarıları ortadan kaldırmak için, Razor pagesmovie. csproj dosyasından aşağıdaki satırı kaldırın:

<Nullable>enable</Nullable>

Alternatif olarak, yapı iskelesi kodunu düzeltemedi. , RazorPagesMovieContext Aşağıdaki uyarıyı oluşturur:

Uyarı CS8618 null olamayan ' film ' özelliği, Oluşturucu çıkarken null olmayan bir değer içermelidir. Özelliği null yapılabilir olarak bildirmeyi düşünün.

Uyarıyı onarmak için öneriyi uygulayın ve Movie özelliği null yapılabilirolarak bildirin.

        public DbSet<RazorPagesMovie.Models.Movie>? Movie { get; set; }
    }
}

?Özelliği null yapılabilir olarak bildirir.

Alternatif bir yaklaşım, CS8618 uyarısını pragma deyimleriyle devre dışı bırakmalıdır:

    public class RazorPagesMovieContext : DbContext
    {
#pragma warning disable CS8618
        public RazorPagesMovieContext (DbContextOptions<RazorPagesMovieContext> options)
#pragma warning restore CS8618 
            : base(options)
        {
        }

        public DbSet<RazorPagesMovie.Models.Movie> Movie { get; set; }
    }
}

RazorSayfalardaki C# kod arkasındaki uyarılar için, uyarıları devre dışı bırakmak için pragma c# Önişlemci yönergesini kullanın. Örneğin, Pages/filmler/ Index . cshtml. cs dosyasında aşağıdaki vurgulanmış kodu kullanın:

namespace RazorPagesMovie.Pages.Movies
{
#pragma warning disable CS8618
#pragma warning disable CS8604
    public class IndexModel : PageModel
    {
        private readonly RazorPagesMovie.Data.RazorPagesMovieContext _context;

        public IndexModel(RazorPagesMovie.Data.RazorPagesMovieContext context)
        {
            _context = context;
        }

        public IList<Movie> Movie { get; set; }

        public async Task OnGetAsync()
        {
            Movie = await _context.Movie.ToListAsync();
        }
    }
#pragma warning disable CS8618
#pragma warning disable CS8604
}

Pages/filmler/delete. cshtml. cs dosyası aşağıdaki pragma deyimleri gerektirir:

#pragma warning disable CS8618
#pragma warning disable CS8601
#pragma warning disable CS8602
#pragma warning disable CS8604
// Class
#pragma warning restore CS8618
#pragma warning restore CS8601
#pragma warning restore CS8602
#pragma warning restore CS8604

NU1603 Package eşleşmeyen uyarıları yoksay, .NET 6 yayınlandığında düzeltilecektir.

Uygulamayı test etme

  1. Uygulamayı çalıştırın ve /Movies TARAYıCıDAKI URL 'ye ( http://localhost:port/movies ) ekleyin.

    Aşağıdaki hata iletisini alırsanız:

    SqlException: Cannot open database "RazorPagesMovieContext-GUID" requested by the login. The login failed.
    Login failed for user 'User-name'.
    

    Geçişler adımınıkaçırdınız.

  2. Oluştur bağlantısını test edin.

    Sayfa oluşturma

    Not

    Alana ondalık virgüller giremeyebilirsiniz Price . Ondalık bir nokta ve US-English tarih biçimleri için virgül (",") kullanan Ingilizce olmayan yerel ayarlarda jQuery doğrulamasını desteklemek için, uygulamanın Genelleştirilmiş olması gerekir. genelleştirme yönergeleri için bu GitHub sorunabakın.

  3. Düzenle, Ayrıntılar ve Sil bağlantılarını test edin.

Sonraki öğreticide, yapı iskelesi tarafından oluşturulan dosyalar açıklanmaktadır.

Tamamlanan örnekle ilgili sorun giderme

Giderebileceğiniz bir sorunla karşılaşırsanız, kodunuzu tamamlanan projeyle karşılaştırın. Tamamlanmış projeyi görüntüleyin veya indirin (indirme).

Ek kaynaklar

Bu bölümde, bir veritabanında film yönetimi için sınıflar eklenir. Uygulamanın model sınıfları veritabanıyla çalışmak için Entity Framework Core (EF Core) kullanır. EF Core, veri erişimini kolaylaştıran bir nesne ilişkisel Eşleyici (O/RM). Önce model sınıflarını yazdığınızda EF Core veritabanını oluşturur.

Model sınıfları, EF Core bağımlılığı olmadığından POCO sınıfları ("P Lain-O ld C LR o bjects") olarak bilinir. Veritabanında depolanan verilerin özelliklerini tanımlar.

Örnek kodu görüntüleme veya indirme (indirme).

Veri modeli ekleme

  1. Bu Çözüm Gezgini, Razor PagesMovie projesine sağ tıklayın ve > Klasör > Ekle'ye tıklayın. Klasöre Models adını girin.

  2. Modeller klasörüne sağ tıklayın. Sınıf Ekle'yi > seçin. Sınıfa Film adını girin.

  3. Sınıfına aşağıdaki özellikleri Movie ekleyin:

    using System;
    using System.ComponentModel.DataAnnotations;
    
    namespace RazorPagesMovie.Models
    {
        public class Movie
        {
            public int ID { get; set; }
            public string Title { get; set; }
    
            [DataType(DataType.Date)]
            public DateTime ReleaseDate { get; set; }
            public string Genre { get; set; }
            public decimal Price { get; set; }
        }
    }
    

sınıfı Movie şunları içerir:

  • alanı, ID birincil anahtar için veritabanı tarafından gereklidir.

  • [DataType(DataType.Date)]: [DataType] özniteliği veri türünü () Date belirtir. Bu öznitelikle:

    • Kullanıcının tarih alanına saat bilgilerini girmesi gerekmez.
    • Saat bilgileri değil yalnızca tarih görüntülenir.

DataAnnotations sonraki bir öğreticide ele atılır.

Derleme hatası olmadığını doğrulamak için projeyi derle.

Film modelinin iskelesi

Bu bölümde, film modeli iskelesi vardır. Yani yapı iskelesi aracı, film modeli için Oluşturma, Okuma, Güncelleştirme ve Silme (CRUD) işlemlerine yönelik sayfalar üretir.

  1. Sayfalar/Filmler klasörü oluşturun:

    1. Sayfalar klasörüne sağ tıklayın ve yeni > > Ekle'ye tıklayın.
    2. Klasöre Movies adını girin.
  2. Sayfalar/Filmler klasörüne sağ tıklayın ve yeni > > Ekle'ye tıklayın.

    Yeni İskeleLi Öğe

  3. İskele Ekle iletişim kutusunda, Entity Framework Razor (CRUD) Ekle seçeneğini kullanarak Sayfalar'ı > seçin.

    yapı iskelesi ekleme

  4. Entity Framework Razor (CRUD) iletişim kutusunu kullanarak Sayfa Ekle'yi tamamlama:

    1. Model sınıfı açılan listesinde Film ( Razor SayfalarMovie.Models) öğesini seçin.
    2. Veri bağlamı sınıfı satırına + (artı) işareti seçin.
      1. Veri Bağlamı Ekle iletişim kutusunda sınıf RazorPagesMovie.Data.RazorPagesMovieContext adı oluşturulur.
    3. Add (Ekle) seçeneğini belirleyin.

    Razor Pages ekleme

Dosya, appsettings.json yerel veritabanına bağlanmak için kullanılan bağlantı dizesiyle güncelleştirilir.

Oluşturulan ve güncelleştirilen dosyalar

İskele işlemi aşağıdaki dosyaları oluşturur:

  • Sayfalar/Filmler: Oluşturma, Silme, Ayrıntılar, Düzenleme ve Index .
  • Data/ Razor PagesMovieContext.cs

Güncelleştirilmiş dosyalar

  • Startup.cs

Oluşturulan ve güncelleştirilen dosyalar sonraki bölümde açıklanmıştır.

EF'nin geçiş özelliğini kullanarak ilk veritabanı şemasını oluşturma

Entity Framework Core geçişler özelliği şunların bir yolunu sağlar:

  • İlk veritabanı şemasını oluşturun.
  • Veritabanı şemasını uygulamanın veri modeliyle eşit tutmak için artımlı olarak güncelleştirin. Veritabanındaki mevcut veriler korunur.

Bu bölümde, Paket Yöneticisi Konsolu (PMC) penceresi kullanılır:

  • İlk geçişi ekleyin.
  • Veritabanını ilk geçişle güncelleştirin.
  1. Araçlar menüsünden Konsol'NuGet Paket Yöneticisi > Paket Yöneticisi seçin.

    PMC menüsü

  2. PMC'ye aşağıdaki komutları girin:

    Add-Migration InitialCreate
    Update-Database
    

Örneğin SQL Server komutlar şu uyarıyı üretir: "'Film' varlık türü üzerinde 'Price' ondalık sütunu için bir tür belirtilmedi. Bu, varsayılan duyarlık ve ölçeklendirmeye sığmayan değerlerin sessizce kesilmesine neden olur. 'HasColumnType()SQL kullanarak tüm değerleri barındıran sunucu sütun türünü açıkça belirtin."

Uyarıyı yoksayın çünkü sonraki bir adımda ele alınacak.

komutu, migrations ilk veritabanı şemasını oluşturmak için kod oluşturur. Şema, içinde belirtilen modeli temel alan bir DbContext şemadır. bağımsız InitialCreate değişkeni, geçişleri ad olarak ifade etmek için kullanılır. Herhangi bir ad kullanılabilir, ancak kurala göre geçişi açıklayan bir ad seçilir.

komutu, update Up uygulanmadan geçişlerde yöntemini çalıştırır. Bu durumda, update veritabanını Up oluşturan Migrations/ <time-stamp> _InitialCreate.cs dosyasında yöntemini çalıştırır.

Bağımlılık ekleme ile kaydedilen bağlamı inceleme

ASP.NET Core, bağımlılık ekleme ile birlikte yerleşiktir. Veritabanı bağlamı gibi EF Core hizmetler, uygulamanın başlatılması sırasında bağımlılık ekleme ile kaydedilir. Bu hizmetleri gerektiren bileşenler (Sayfalar Razor gibi) oluşturucu parametreleri aracılığıyla sağlanır. Veritabanı bağlam örneğini alan oluşturucu kodu öğreticinin devamlarında gösterilir.

Yapı iskelesi aracı otomatik olarak bir veritabanı bağlamı oluşturdu ve bunu bağımlılık ekleme kapsayıcısı ile kaydetti.

yöntemini Startup.ConfigureServices inceleme. Vurgulanan satır iskelesi tarafından eklendi:

public void ConfigureServices(IServiceCollection services)
{
    services.AddRazorPages();

    services.AddDbContext<RazorPagesMovieContext>(options =>
      options.UseSqlServer(Configuration.GetConnectionString("RazorPagesMovieContext")));
}

Koordinatlar EF Core oluşturma, okuma, güncelleştirme ve silme RazorPagesMovieContext gibi Movie işlevlere sahip olur. Veri bağlamı ( RazorPagesMovieContext ) Microsoft.EntityFrameworkCore.DbContext'den türetildi. Veri bağlamı, veri modeline hangi varlıkların dahil olduğunu belirtir.

using Microsoft.EntityFrameworkCore;

namespace RazorPagesMovie.Data
{
    public class RazorPagesMovieContext : DbContext
    {
        public RazorPagesMovieContext (
            DbContextOptions<RazorPagesMovieContext> options)
            : base(options)
        {
        }

        public DbSet<RazorPagesMovie.Models.Movie> Movie { get; set; }
    }
}

Yukarıdaki kod, varlık kümesi için bir DbSet <Movie> özelliği oluşturur. Bu Entity Framework bir varlık kümesi genellikle bir veritabanı tablosuna karşılık gelir. Varlık, tablodaki bir satıra karşılık gelir.

DbContextOptions nesnesinde bir yöntem çağrılarak bağlantı dizesinin adı bağlama geçirildi. Yerel geliştirme için Yapılandırma sistemi bağlantı dizesini dosyasından appsettings.json okur.

Uygulamayı test etme

  1. Uygulamayı çalıştırın ve /Movies tarayıcıda URL'ye ekleyin ( http://localhost:port/movies ).

    Aşağıdaki hata iletisini alırsanız:

    SqlException: Cannot open database "RazorPagesMovieContext-GUID" requested by the login. The login failed.
    Login failed for user 'User-name'.
    

    Geçişler adımını atladınız.

  2. Oluştur bağlantısını test edin.

    Sayfa oluşturma

    Not

    Alana ondalık virgül gireyemebilirsiniz. Price Ondalık ayırıcı için virgül (",") kullanan İngilizce olmayan yerel değerler için jQuery doğrulamasını desteklemek ve tarih US-English için uygulamanın genelleştirilmiş olması gerekir. Genelleştirme yönergeleri için bu soruna GitHub bakın.

  3. Düzenle, Ayrıntılar ve Sil bağlantılarını test edin.

SQL Entity Framework Core günlüğe kaydetme

Günlüğe kaydetme yapılandırması genellikle Logging appSettings'in bölümü tarafından sağlanır. {Environment} . JSON dosyaları. SQL deyimlerini günlüğe kaydetmek için, "Microsoft.EntityFrameworkCore.Database.Command": "Information" appsettings.Development.js dosyasına ekleyin:

{
  "ConnectionStrings": {
    "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=MyDB-2;Trusted_Connection=True;MultipleActiveResultSets=true"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
     ,"Microsoft.EntityFrameworkCore.Database.Command": "Information"
    }
  },
  "AllowedHosts": "*"
}

önceki JSON ile, SQL deyimleri komut satırında ve Visual Studio çıkış penceresinde görüntülenir.

daha fazla bilgi için, bkz .NET Core ve ASP.NET Core'da günlük . ve bu GitHub sorunu.

Sonraki öğreticide yapı iskelesi tarafından oluşturulan dosyalar açık açıklamalır.

Ek kaynaklar

Bu bölümde, filmlerin yönetimi için sınıflar eklenmiştir. Uygulamanın model sınıfları veritabanıyla Entity Framework Core (EF Core) kullanır. EF Core, veri erişimini basitleştiren bir nesne ilişkisel eşleyicidir (O/RM).

Model sınıfları POCO sınıfları ("düz eski CLR nesnelerinden") olarak bilinir çünkü bu sınıflara herhangi bir EF Core. Veritabanında depolanan verilerin özelliklerini tanımlar.

Örnek kodu görüntüleme veya indirme (indirme).

Veri modeli ekleme

Razor PagesMovie projesine sağ tıklayın ve > Klasör Ekle'ye > tıklayın. Klasöre Models adını girin.

Modeller klasörüne sağ tıklayın. Sınıf Ekle'yi > seçin. Sınıfa Film adını girin.

Sınıfına aşağıdaki özellikleri Movie ekleyin:

using System;
using System.ComponentModel.DataAnnotations;

namespace RazorPagesMovie.Models
{
    public class Movie
    {
        public int ID { get; set; }
        public string Title { get; set; }

        [DataType(DataType.Date)]
        public DateTime ReleaseDate { get; set; }
        public string Genre { get; set; }
        public decimal Price { get; set; }
    }
}

sınıfı Movie şunları içerir:

  • alanı, ID birincil anahtar için veritabanı tarafından gereklidir.

  • [DataType(DataType.Date)]: DataType özniteliği, verilerin türünü () Date belirtir. Bu öznitelikle:

    • Kullanıcının tarih alanına saat bilgilerini girmesi gerekmez.
    • Saat bilgileri değil yalnızca tarih görüntülenir.

DataAnnotations sonraki bir öğreticide ele atılır.

DataAnnotations sonraki bir öğreticide ele atılır.

Derleme hatası olmadığını doğrulamak için projeyi derle.

Film modelinin iskelesi

Bu bölümde, film modeli iskelesi vardır. Yani yapı iskelesi aracı, film modeli için Oluşturma, Okuma, Güncelleştirme ve Silme (CRUD) işlemlerine yönelik sayfalar üretir.

Sayfalar/Filmler klasörü oluşturun:

  • Sayfalar klasörüne sağ tıklayın ve yeni > > Ekle'ye tıklayın.
  • Klasöre Movies adını girin.

Sayfalar/Filmler klasörüne sağ tıklayın ve yeni > > Ekle'ye tıklayın.

VScode'da Yeni İskeleLi Öğe

İskele Ekle iletişim kutusunda, Entity Framework Razor (CRUD) Ekle seçeneğini kullanarak Sayfalar'ı > seçin.

VScode'da İskele Ekleme

Entity Framework Razor (CRUD) iletişim kutusunu kullanarak Sayfa Ekle'yi tamamlama:

  • Model sınıfı açılan listesinde Film ( Razor SayfalarMovie.Models) öğesini seçin.
  • Veri bağlamı sınıfı satırına + (artı) işareti seçin ve Razor PagesMovie'dan oluşturulan adı değiştirebilirsiniz.Modelleri. Razor PagesMovieContext'den Razor PagesMovie'ya.Veri. Razor PagesMovieContext. Bu değişiklik gerekli değildir. Doğru ad alanıyla veritabanı bağlam sınıfını oluşturur.
  • Add (Ekle) seçeneğini belirleyin.

Razor VScode'da Sayfalar ekleme

Dosya, appsettings.json yerel veritabanına bağlanmak için kullanılan bağlantı dizesiyle güncelleştirilir.

Oluşturulan dosyalar

İskele işlemi aşağıdaki dosyaları oluşturur ve günceller:

  • Sayfalar/Filmler: Oluşturma, Silme, Ayrıntılar, Düzenleme ve Index .
  • Data/ Razor PagesMovieContext.cs

Güncelleştirildi

  • Startup.cs

Oluşturulan ve güncelleştirilen dosyalar sonraki bölümde açıklanmıştır.

İlk geçiş

Bu bölümde, Paket Yöneticisi Konsolu (PMC) şunları yapmak için kullanılır:

  • İlk geçişi ekleyin.
  • Veritabanını ilk geçişle güncelleştirin.

Araçlar menüsünden Konsol'NuGet Paket Yöneticisi > Paket Yöneticisi seçin.

PMC menüsü

PMC'ye aşağıdaki komutları girin:

Add-Migration InitialCreate
Update-Database

Yukarıdaki komutlar şu uyarıyı oluşturur: "' Movie ' varlık türündeki ' Price ' ondalık sütunu için tür belirtilmedi. Bu, varsayılan duyarlık ve ölçeğe uygun olmadıkları takdirde değerlerin sessizce kesilmesine neden olur. ' hasccolumntype () ' kullanarak tüm değerleri barındırabilecek SQL sunucusu sütun türünü açıkça belirtin. "

Daha sonraki bir adımda değinilecek şekilde uyarıyı yoksayın.

Geçişler komutu, ilk veritabanı şemasını oluşturmak için kod üretir. Şema, içinde belirtilen modeli temel alır DbContext . InitialCreateBağımsız değişken, geçişleri adlandırmak için kullanılır. Herhangi bir ad kullanılabilir, ancak geçiş işlemini açıklayan bir ad seçilir.

updateKomutu Up uygulanmamış geçişlerde yöntemini çalıştırır. Bu durumda, update Up veritabanını oluşturan geçişler/ <time-stamp> _InitialCreate. cs dosyasında yöntemini çalıştırır.

Bağımlılık ekleme ile kaydedilen bağlamı inceleyin

ASP.NET Core bağımlılık eklemeile oluşturulmuştur. EF Core veritabanı bağlamı bağlamı gibi hizmetler, uygulamanın başlatılması sırasında bağımlılık ekleme ile kaydedilir. Sayfalar gibi bu hizmetleri gerektiren bileşenler Razor , Oluşturucu parametreleri aracılığıyla sağlanır. Bir veritabanı bağlamı bağlam örneğini alan Oluşturucu kodu öğreticide daha sonra gösterilmiştir.

Scafkatlama aracı otomatik olarak bir veritabanı bağlamı bağlamı oluşturup bağımlılık ekleme kapsayıcısına kaydettirdi.

Yöntemini inceleyin Startup.ConfigureServices . Vurgulanan satır, scaffolder tarafından eklendi:

public void ConfigureServices(IServiceCollection services)
{
    services.AddRazorPages();

    services.AddDbContext<RazorPagesMovieContext>(options =>
      options.UseSqlServer(Configuration.GetConnectionString("RazorPagesMovieContext")));
}

RazorPagesMovieContextModel Için oluşturma, okuma, güncelleştirme ve silme gibi koordinatları EF Core işlevleri Movie . Veri bağlamı ( RazorPagesMovieContext ) Microsoft. EntityFrameworkCore. DbContextöğesinden türetilir. Veri bağlamı, veri modeline hangi varlıkların ekleneceğini belirtir.

using Microsoft.EntityFrameworkCore;

namespace RazorPagesMovie.Data
{
    public class RazorPagesMovieContext : DbContext
    {
        public RazorPagesMovieContext (
            DbContextOptions<RazorPagesMovieContext> options)
            : base(options)
        {
        }

        public DbSet<RazorPagesMovie.Models.Movie> Movie { get; set; }
    }
}

Önceki kod, varlık kümesi için bir Dbset <Movie> özelliği oluşturur. Entity Framework terminolojisinde, genellikle bir varlık kümesi bir veritabanı tablosuna karşılık gelir. Bir varlık, tablodaki bir satıra karşılık gelir.

Bağlantı dizesinin adı, Dbcontextoptions nesnesinde bir yöntem çağırarak bağlama geçirilir. Yerel geliştirme için yapılandırma sistemi , bağlantı dizesini appsettings.json dosyadan okur.

Uygulamayı test etme

  • Uygulamayı çalıştırın ve /Movies TARAYıCıDAKI URL 'ye ( http://localhost:port/movies ) ekleyin.

Şu hatayı alırsanız:

SqlException: Cannot open database "RazorPagesMovieContext-GUID" requested by the login. The login failed.
Login failed for user 'User-name'.

Geçişler adımınıkaçırdınız.

  • Oluştur bağlantısını test edin.

    Sayfa oluşturma

    Not

    Alana ondalık virgüller giremeyebilirsiniz Price . Ondalık bir nokta ve US-English tarih biçimleri için virgül (",") kullanan Ingilizce olmayan yerel ayarlarda jQuery doğrulamasını desteklemek için, uygulamanın Genelleştirilmiş olması gerekir. genelleştirme yönergeleri için bu GitHub sorunabakın.

  • Düzenle, Ayrıntılar ve Sil bağlantılarını test edin.

Sonraki öğreticide, yapı iskelesi tarafından oluşturulan dosyalar açıklanmaktadır.

Ek kaynaklar