2. Bölüm, ASP.NET Core'da Sayfalar uygulamasına Razor model ekleme
Makale
Bu öğreticide, bir veritabanındaki filmleri yönetmek 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 basitleştiren bir nesne ilişkisel eşleyicidir (O/RM). Önce model sınıflarını yazar ve EF Core veritabanını oluşturur.
Model sınıfları, üzerinde EF Corebağımlılıkları olmadığından POCO sınıfları ("Plain-O ld CLR Objects" öğesinden) olarak bilinir. Veritabanında depolanan verilerin özelliklerini tanımlar.
Klasöre Models sağ tıklayın. Sınıf Ekle'yi>seçin. Sınıfa Movie adını verin.
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; }
[DataType(DataType.Date)]
public DateTime ReleaseDate { get; set; }
public string? Genre { get; set; }
public decimal Price { get; set; }
}
sınıfı aşağıdakileri Movie içerir:
Bu ID alan, birincil anahtar için veritabanı tarafından gereklidir.
Kullanıcının tarih alanına saat bilgilerini girmesi gerekmez.
Zaman bilgisi değil, yalnızca tarih görüntülenir.
Sonrasındaki soru işareti string özelliğin null atanabilir olduğunu gösterir. Daha fazla bilgi için bkz . Null atanabilir başvuru türleri.
adlı Modelsbir klasör ekleyin.
adlı Movie.csklasöre Models bir sınıf ekleyin.
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; }
[DataType(DataType.Date)]
public DateTime ReleaseDate { get; set; }
public string? Genre { get; set; }
public decimal Price { get; set; }
}
sınıfı aşağıdakileri Movie içerir:
ID Veritabanı için birincil anahtar sağlayan alan.
EF Core Paketi bağımlılık olarak yükleyen EF Core SQLite sağlayıcısı.
yapı iskelesi için gereken paketler: Microsoft.VisualStudio.Web.CodeGeneration.Design ve Microsoft.EntityFrameworkCore.SqlServer.
Bir uygulamanın veritabanı bağlamlarını ortama göre yapılandırmasına izin veren birden çok ortam yapılandırmasıyla ilgili yönergeler için bkz . ASP.NET Core'da birden çok ortam kullanma.
Not
Varsayılan olarak yüklenecek .NET ikili dosyalarının mimarisi şu anda çalışan işletim sistemi mimarisini temsil eder. Farklı bir işletim sistemi mimarisi belirtmek için bkz . dotnet tool install, --arch option.
Daha fazla bilgi için bkz. GitHub sorunu dotnet/AspNetCore.Docs #29262.
Çözüm Aracı Penceresinde, PagesMovie projesine control tuşunaRazor basılı tuşlarına tıklayıp Yeni Klasör Ekle>... seçeneğini belirleyin. klasörünü Modelsadlandırın.
Klasöre Control tuşuyla Models tıklayın ve ardından Yeni Sınıf Ekle>... öğesini seçin.
Yeni Dosya iletişim kutusunda:
Sol bölmede Genel'i seçin.
Orta bölmede Boş Sınıf'ı seçin.
Sınıfa Movie adını verin ve Oluştur'u seçin.
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; }
[DataType(DataType.Date)]
public DateTime ReleaseDate { get; set; }
public string? Genre { get; set; }
public decimal Price { get; set; }
}
sınıfı aşağıdakileri Movie içerir:
ID Veritabanı için birincil anahtar sağlayan alan.
Derleme hatası olmadığını doğrulamak için projeyi derleyin.
Film modelinin iskelesini oluşturma
Bu bölümde, film modeli iskelesi oluşturulmuş. Diğer bir ifadeyle, iskele aracı film modeli için Oluşturma, Okuma, Güncelleştirme ve Silme (CRUD) işlemleri için sayfalar oluşturur.
Geliştirme için SQLite, üretim için SQL Server kullanma
SQLite seçildiğinde, şablon tarafından oluşturulan kod geliştirme için hazırdır. Aşağıdaki kod, geliştirmede SQLite bağlantı dizesini ve üretimde SQL Server'ı seçmeyi gösterir.
using Microsoft.EntityFrameworkCore;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
if (builder.Environment.IsDevelopment())
{
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlite(builder.Configuration.GetConnectionString("RazorPagesMovieContext")));
}
else
{
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("ProductionMovieContext")));
}
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
Önceki kod geliştirme modunda çağırdığından WebApplication geliştirmede çağrı UseDeveloperExceptionPageUseDeveloperExceptionPage yapmaz.
yapı iskelesi aracı için gereken NuGet paketini Microsoft.EntityFrameworkCore.Sqliteekleyin.
Çözüm Aracı Penceresi'nde PagesMovie projesine control tuşunaRazor basarak tıklayın ve terminalde aç'ı seçin.
Terminal penceresi, Program.cs ve .csproj dosyalarını içeren proje dizininde komut istemiyle açılır.
Gerekli paketler otomatik olarak indirilip projeye eklendiğinden iskele işleminin tamamlanması biraz zaman alabilir.
Dosya appsettings.json , yerel veritabanına bağlanmak için kullanılan bağlantı dizesiyle güncelleştirilir.
Geliştirme için SQLite, üretim için SQL Server kullanma
SQLite seçildiğinde, şablon tarafından oluşturulan kod geliştirme için hazırdır. Aşağıdaki kod, geliştirmede SQLite bağlantı dizesini ve üretimde SQL Server'ı seçmeyi gösterir.
using Microsoft.EntityFrameworkCore;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
if (builder.Environment.IsDevelopment())
{
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlite(builder.Configuration.GetConnectionString("RazorPagesMovieContext")));
}
else
{
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("ProductionMovieContext")));
}
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
Önceki kod geliştirme modunda çağırdığından WebApplication geliştirmede çağrı UseDeveloperExceptionPageUseDeveloperExceptionPage yapmaz.
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 Dizin oluşturma.
Data/RazorPagesMovieContext.cs
Oluşturulan dosyalar sonraki öğreticide açıklanmıştır.
İskele işlemi dosyaya aşağıdaki vurgulanmış kodu Program.cs 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") ?? throw new InvalidOperationException("Connection string 'RazorPagesMovieContext' not found.")));
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
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();
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlite(builder.Configuration.GetConnectionString("RazorPagesMovieContext") ?? throw new InvalidOperationException("Connection string 'RazorPagesMovieContext' not found.")));
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
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();
Değişiklikler Program.cs bu öğreticinin ilerleyen bölümlerinde açıklanmıştır.
EF'nin geçiş özelliğini kullanarak ilk veritabanı şemasını oluşturma
Entity Framework Core'daki geçişler ö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ş durumda tutmak için artımlı olarak güncelleştirin. Veritabanındaki mevcut veriler korunur.
komutu, Add-Migration ilk veritabanı şemasını oluşturmak için kod oluşturur. Şema, içinde DbContextbelirtilen modeli temel alır. bağımsız InitialCreate değişkeni geçişi adlandırmak 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-Database , uygulanmamış geçişlerde yöntemini çalıştırır Up . Bu durumda komutu, veritabanını oluşturan dosyasında yöntemini Migrations/<time-stamp>_InitialCreate.cs çalıştırırUp.
PagesMovie.csproj projesineRazor sağ tıklayın ve Tümleşik Terminalde Aç'ı seçin.
Terminal penceresi, Program.cs ve .csproj dosyalarını içeren proje dizininde komut istemiyle açılır.
Aşağıdaki .NET CLI komutlarını çalıştırın:
dotnet ef migrations add InitialCreate
dotnet ef database update
komutu, migrations ilk veritabanı şemasını oluşturmak için kod oluşturur. Şema, içinde DbContextbelirtilen modeli temel alır. Bağımsız InitialCreate değişken, geçişleri adlandırmak 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 , uygulanmamış geçişlerde yöntemini çalıştırır Up . Bu durumda, update veritabanını oluşturan dosyasında yöntemini Migrations/<time-stamp>_InitialCreate.cs çalıştırırUp.
Not
SQLite için Price , alanın sütun türü olarak TEXTayarlanır. Bu, sonraki bir adımda çözülür.
PagesMovie projesine Control tuşuna Razorbasarak tıklayın ve terminalde aç'ı seçin.
Terminal penceresi, Program.cs ve .csproj dosyalarını içeren proje dizininde komut istemiyle açılır.
Aşağıdaki .NET CLI komutlarını çalıştırın:
dotnet tool uninstall --global dotnet-ef
dotnet tool install --global dotnet-ef
dotnet ef migrations add InitialCreate
dotnet ef database update
Varsayılan olarak yüklenecek .NET ikili dosyalarının mimarisi şu anda çalışan işletim sistemi mimarisini temsil eder. Farklı bir işletim sistemi mimarisi belirtmek için bkz . dotnet tool install, --arch option.
Daha fazla bilgi için bkz. GitHub sorunu dotnet/AspNetCore.Docs #29262.
komutu, migrations ilk veritabanı şemasını oluşturmak için kod oluşturur. Şema, içinde DbContextbelirtilen modeli temel alır. Bağımsız InitialCreate değişken, geçişleri adlandırmak 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 , uygulanmamış geçişlerde yöntemini çalıştırır Up . Bu durumda, update veritabanını oluşturan dosyasında yöntemini Migrations/<time-stamp>_InitialCreate.cs çalıştırırUp.
Not
SQLite için Price , alanın sütun türü olarak TEXTayarlanır. Bu, sonraki bir adımda çözülür.
Sonraki bir adımda ele alınan aşağıdaki uyarı görüntülenir:
'Movie' varlık türündeki 'Price' ondalık sütunu için tür belirtilmedi. Bu, varsayılan duyarlığa ve ölçeklendirmeye uymayan değerlerin sessizce kesilmesine neden olur. 'HasColumnType()' kullanarak tüm değerleri barındırabilecek SQL server sütun türünü açıkça belirtin.
Veri modeline hangi varlıkların dahil olduğunu belirtir.
EF Core Model için Oluşturma, Okuma, Güncelleştirme ve Silme gibi işlevleri koordine ederMovie.
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; } = default!;
}
}
Yukarıdaki kod, varlık kümesi için bir DbSet<Movie> özelliği oluşturur. Entity Framework terminolojisinde bir varlık kümesi genellikle bir veritabanı tablosuna karşılık gelir. Varlık, tablodaki bir satıra karşılık gelir.
Bağlantı dizesinin adı, DbContextOptions nesnesinde bir yöntem çağrılarak bağlama geçirilir. Yerel geliştirme için Yapılandırma sistemi dosyadan bağlantı dizesini appsettings.json okur.
Uygulamayı sınama
Uygulamayı çalıştırın ve tarayıcıda (http://localhost:port/movies) URL'ye ekleyin/Movies.
Aşağıdaki 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ş adımını kaçırdınız.
Yeni Oluştur bağlantısını test edin.
Not
Alana ondalık virgül Price giremeyebilirsiniz. Ondalık ayırıcı ve ABD İngilizcesi olmayan tarih biçimleri için virgül (",") kullanan İngilizce olmayan yerel ayarlar için jQuery doğrulamasını desteklemek için uygulamanın genelleştirilmesi gerekir. Genelleştirme yönergeleri için bu GitHub sorununa bakı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.
Bağımlılık ekleme ile kaydedilen bağlamı inceleme
ASP.NET Core, bağımlılık ekleme ile oluşturulur. Veritabanı bağlamı EF Core gibi hizmetler, uygulama başlatma sırasında bağımlılık ekleme ile kaydedilir. Bu hizmetleri gerektiren bileşenler (Sayfalar gibi Razor ) oluşturucu parametreleri aracılığıyla sağlanır. Veritabanı bağlam örneğini alan oluşturucu kodu öğreticinin ilerleyen bölümlerinde gösterilir.
İskele aracı otomatik olarak bir veritabanı bağlamı oluşturup bağımlılık ekleme kapsayıcısıyla kaydetti. Aşağıdaki vurgulanmış kod, iskele tarafından dosyaya Program.cs 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") ?? throw new InvalidOperationException("Connection string 'RazorPagesMovieContext' not found.")));
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
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();
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlite(builder.Configuration.GetConnectionString("RazorPagesMovieContext") ?? throw new InvalidOperationException("Connection string 'RazorPagesMovieContext' not found.")));
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
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();
Tamamlanan örnekle ilgili sorun giderme
Çözemediğiniz bir sorunla karşılaşırsanız kodunuzu tamamlanmış projeyle karşılaştırın. Tamamlanan projeyi görüntüleme veya indirme (indirme).
Bu öğreticide, bir veritabanındaki filmleri yönetmek 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 basitleştiren bir nesne ilişkisel eşleyicidir (O/RM). Önce model sınıflarını yazar ve EF Core veritabanını oluşturur.
Model sınıfları, üzerinde EF Corebağımlılıkları olmadığından POCO sınıfları ("Plain-O ld CLR Objects" öğesinden) olarak bilinir. Veritabanında depolanan verilerin özelliklerini tanımlar.
Klasöre Models sağ tıklayın. Sınıf Ekle'yi>seçin. Sınıfa Movie adını verin.
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; }
[DataType(DataType.Date)]
public DateTime ReleaseDate { get; set; }
public string? Genre { get; set; }
public decimal Price { get; set; }
}
sınıfı aşağıdakileri Movie içerir:
Bu ID alan, birincil anahtar için veritabanı tarafından gereklidir.
Kullanıcının tarih alanına saat bilgilerini girmesi gerekmez.
Zaman bilgisi değil, yalnızca tarih görüntülenir.
Sonrasındaki soru işareti string özelliğin null atanabilir olduğunu gösterir. Daha fazla bilgi için bkz . Null atanabilir başvuru türleri.
adlı Modelsbir klasör ekleyin.
adlı Movie.csklasöre Models bir sınıf ekleyin.
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; }
[DataType(DataType.Date)]
public DateTime ReleaseDate { get; set; }
public string? Genre { get; set; }
public decimal Price { get; set; }
}
sınıfı aşağıdakileri Movie içerir:
ID Veritabanı için birincil anahtar sağlayan alan.
EF Core Paketi bağımlılık olarak yükleyen EF Core SQLite sağlayıcısı.
yapı iskelesi için gereken paketler: Microsoft.VisualStudio.Web.CodeGeneration.Design ve Microsoft.EntityFrameworkCore.SqlServer.
Bir uygulamanın veritabanı bağlamlarını ortama göre yapılandırmasına izin veren birden çok ortam yapılandırmasıyla ilgili yönergeler için bkz . ASP.NET Core'da birden çok ortam kullanma.
Not
Varsayılan olarak yüklenecek .NET ikili dosyalarının mimarisi şu anda çalışan işletim sistemi mimarisini temsil eder. Farklı bir işletim sistemi mimarisi belirtmek için bkz . dotnet tool install, --arch option.
Daha fazla bilgi için bkz. GitHub sorunu dotnet/AspNetCore.Docs #29262.
Çözüm Aracı Penceresinde, PagesMovie projesine control tuşunaRazor basılı tuşlarına tıklayıp Yeni Klasör Ekle>... seçeneğini belirleyin. klasörünü Modelsadlandırın.
Klasöre Control tuşuyla Models tıklayın ve ardından Yeni Sınıf Ekle>... öğesini seçin.
Yeni Dosya iletişim kutusunda:
Sol bölmede Genel'i seçin.
Orta bölmede Boş Sınıf'ı seçin.
Sınıfa Movie adını verin ve Oluştur'u seçin.
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; }
[DataType(DataType.Date)]
public DateTime ReleaseDate { get; set; }
public string? Genre { get; set; }
public decimal Price { get; set; }
}
sınıfı aşağıdakileri Movie içerir:
ID Veritabanı için birincil anahtar sağlayan alan.
Derleme hatası olmadığını doğrulamak için projeyi derleyin.
Film modelinin iskelesini oluşturma
Bu bölümde, film modeli iskelesi oluşturulmuş. Diğer bir ifadeyle, iskele aracı film modeli için Oluşturma, Okuma, Güncelleştirme ve Silme (CRUD) işlemleri için sayfalar oluşturur.
Geliştirme için SQLite, üretim için SQL Server kullanma
SQLite seçildiğinde, şablon tarafından oluşturulan kod geliştirme için hazırdır. Aşağıdaki kod, geliştirmede SQLite bağlantı dizesini ve üretimde SQL Server'ı seçmeyi gösterir.
using Microsoft.EntityFrameworkCore;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
if (builder.Environment.IsDevelopment())
{
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlite(builder.Configuration.GetConnectionString("RazorPagesMovieContext")));
}
else
{
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("ProductionMovieContext")));
}
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
Önceki kod geliştirme modunda çağırdığından WebApplication geliştirmede çağrı UseDeveloperExceptionPageUseDeveloperExceptionPage yapmaz.
yapı iskelesi aracı için gereken NuGet paketini Microsoft.EntityFrameworkCore.Sqliteekleyin.
Çözüm Aracı Penceresi'nde PagesMovie projesine control tuşunaRazor basarak tıklayın ve terminalde aç'ı seçin.
Terminal penceresi, Program.cs ve .csproj dosyalarını içeren proje dizininde komut istemiyle açılır.
Gerekli paketler otomatik olarak indirilip projeye eklendiğinden iskele işleminin tamamlanması biraz zaman alabilir.
Dosya appsettings.json , yerel veritabanına bağlanmak için kullanılan bağlantı dizesiyle güncelleştirilir.
Geliştirme için SQLite, üretim için SQL Server kullanma
SQLite seçildiğinde, şablon tarafından oluşturulan kod geliştirme için hazırdır. Aşağıdaki kod, geliştirmede SQLite bağlantı dizesini ve üretimde SQL Server'ı seçmeyi gösterir.
using Microsoft.EntityFrameworkCore;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
if (builder.Environment.IsDevelopment())
{
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlite(builder.Configuration.GetConnectionString("RazorPagesMovieContext")));
}
else
{
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("ProductionMovieContext")));
}
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
Önceki kod geliştirme modunda çağırdığından WebApplication geliştirmede çağrı UseDeveloperExceptionPageUseDeveloperExceptionPage yapmaz.
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 Dizin oluşturma.
Data/RazorPagesMovieContext.cs
Oluşturulan dosyalar sonraki öğreticide açıklanmıştır.
İskele işlemi dosyaya aşağıdaki vurgulanmış kodu Program.cs 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") ?? throw new InvalidOperationException("Connection string 'RazorPagesMovieContext' not found.")));
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
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();
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlite(builder.Configuration.GetConnectionString("RazorPagesMovieContext") ?? throw new InvalidOperationException("Connection string 'RazorPagesMovieContext' not found.")));
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
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();
Değişiklikler Program.cs bu öğreticinin ilerleyen bölümlerinde açıklanmıştır.
EF'nin geçiş özelliğini kullanarak ilk veritabanı şemasını oluşturma
Entity Framework Core'daki geçişler ö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ş durumda tutmak için artımlı olarak güncelleştirin. Veritabanındaki mevcut veriler korunur.
komutu, Add-Migration ilk veritabanı şemasını oluşturmak için kod oluşturur. Şema, içinde DbContextbelirtilen modeli temel alır. bağımsız InitialCreate değişkeni geçişi adlandırmak 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-Database , uygulanmamış geçişlerde yöntemini çalıştırır Up . Bu durumda komutu, veritabanını oluşturan dosyasında yöntemini Migrations/<time-stamp>_InitialCreate.cs çalıştırırUp.
PagesMovie.csproj projesineRazor sağ tıklayın ve Tümleşik Terminalde Aç'ı seçin.
Terminal penceresi, Program.cs ve .csproj dosyalarını içeren proje dizininde komut istemiyle açılır.
Aşağıdaki .NET CLI komutlarını çalıştırın:
dotnet ef migrations add InitialCreate
dotnet ef database update
komutu, migrations ilk veritabanı şemasını oluşturmak için kod oluşturur. Şema, içinde DbContextbelirtilen modeli temel alır. Bağımsız InitialCreate değişken, geçişleri adlandırmak 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 , uygulanmamış geçişlerde yöntemini çalıştırır Up . Bu durumda, update veritabanını oluşturan dosyasında yöntemini Migrations/<time-stamp>_InitialCreate.cs çalıştırırUp.
Not
SQLite için Price , alanın sütun türü olarak TEXTayarlanır. Bu, sonraki bir adımda çözülür.
PagesMovie projesine Control tuşuna Razorbasarak tıklayın ve terminalde aç'ı seçin.
Terminal penceresi, Program.cs ve .csproj dosyalarını içeren proje dizininde komut istemiyle açılır.
Aşağıdaki .NET CLI komutlarını çalıştırın:
dotnet tool uninstall --global dotnet-ef
dotnet tool install --global dotnet-ef
dotnet ef migrations add InitialCreate
dotnet ef database update
Varsayılan olarak yüklenecek .NET ikili dosyalarının mimarisi şu anda çalışan işletim sistemi mimarisini temsil eder. Farklı bir işletim sistemi mimarisi belirtmek için bkz . dotnet tool install, --arch option.
Daha fazla bilgi için bkz. GitHub sorunu dotnet/AspNetCore.Docs #29262.
komutu, migrations ilk veritabanı şemasını oluşturmak için kod oluşturur. Şema, içinde DbContextbelirtilen modeli temel alır. Bağımsız InitialCreate değişken, geçişleri adlandırmak 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 , uygulanmamış geçişlerde yöntemini çalıştırır Up . Bu durumda, update veritabanını oluşturan dosyasında yöntemini Migrations/<time-stamp>_InitialCreate.cs çalıştırırUp.
Not
SQLite için Price , alanın sütun türü olarak TEXTayarlanır. Bu, sonraki bir adımda çözülür.
Sonraki bir adımda ele alınan aşağıdaki uyarı görüntülenir:
'Movie' varlık türündeki 'Price' ondalık sütunu için tür belirtilmedi. Bu, varsayılan duyarlığa ve ölçeklendirmeye uymayan değerlerin sessizce kesilmesine neden olur. 'HasColumnType()' kullanarak tüm değerleri barındırabilecek SQL server sütun türünü açıkça belirtin.
Veri modeline hangi varlıkların dahil olduğunu belirtir.
EF Core Model için Oluşturma, Okuma, Güncelleştirme ve Silme gibi işlevleri koordine ederMovie.
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; } = default!;
}
}
Yukarıdaki kod, varlık kümesi için bir DbSet<Movie> özelliği oluşturur. Entity Framework terminolojisinde bir varlık kümesi genellikle bir veritabanı tablosuna karşılık gelir. Varlık, tablodaki bir satıra karşılık gelir.
Bağlantı dizesinin adı, DbContextOptions nesnesinde bir yöntem çağrılarak bağlama geçirilir. Yerel geliştirme için Yapılandırma sistemi dosyadan bağlantı dizesini appsettings.json okur.
Uygulamayı sınama
Uygulamayı çalıştırın ve tarayıcıda (http://localhost:port/movies) URL'ye ekleyin/Movies.
Aşağıdaki 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ş adımını kaçırdınız.
Yeni Oluştur bağlantısını test edin.
Not
Alana ondalık virgül Price giremeyebilirsiniz. Ondalık ayırıcı ve ABD İngilizcesi olmayan tarih biçimleri için virgül (",") kullanan İngilizce olmayan yerel ayarlar için jQuery doğrulamasını desteklemek için uygulamanın genelleştirilmesi gerekir. Genelleştirme yönergeleri için bu GitHub sorununa bakı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.
Bağımlılık ekleme ile kaydedilen bağlamı inceleme
ASP.NET Core, bağımlılık ekleme ile oluşturulur. Veritabanı bağlamı EF Core gibi hizmetler, uygulama başlatma sırasında bağımlılık ekleme ile kaydedilir. Bu hizmetleri gerektiren bileşenler (Sayfalar gibi Razor ) oluşturucu parametreleri aracılığıyla sağlanır. Veritabanı bağlam örneğini alan oluşturucu kodu öğreticinin ilerleyen bölümlerinde gösterilir.
İskele aracı otomatik olarak bir veritabanı bağlamı oluşturup bağımlılık ekleme kapsayıcısıyla kaydetti. Aşağıdaki vurgulanmış kod, iskele tarafından dosyaya Program.cs 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") ?? throw new InvalidOperationException("Connection string 'RazorPagesMovieContext' not found.")));
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
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();
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlite(builder.Configuration.GetConnectionString("RazorPagesMovieContext") ?? throw new InvalidOperationException("Connection string 'RazorPagesMovieContext' not found.")));
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
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();
Tamamlanan örnekle ilgili sorun giderme
Çözemediğiniz bir sorunla karşılaşırsanız kodunuzu tamamlanmış projeyle karşılaştırın. Tamamlanan projeyi görüntüleme veya indirme (indirme).
Bu öğreticide, bir veritabanındaki filmleri yönetmek 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 basitleştiren bir nesne ilişkisel eşleyicidir (O/RM). Önce model sınıflarını yazar ve EF Core veritabanını oluşturur.
Model sınıfları, üzerinde EF Corebağımlılıkları olmadığından POCO sınıfları ("Plain-O ld CLR Objects" öğesinden) olarak bilinir. Veritabanında depolanan verilerin özelliklerini tanımlar.
Klasöre Models sağ tıklayın. Sınıf Ekle'yi>seçin. Sınıfa Movie adını verin.
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ı aşağıdakileri Movie içerir:
Bu ID alan, birincil anahtar için veritabanı tarafından gereklidir.
Kullanıcının tarih alanına saat bilgilerini girmesi gerekmez.
Zaman bilgisi değil, yalnızca tarih görüntülenir.
adlı Modelsbir klasör ekleyin.
adlı Movie.csklasöre Models bir sınıf ekleyin.
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ı aşağıdakileri Movie içerir:
ID Veritabanı için birincil anahtar sağlayan alan.
EF Core Paketi bağımlılık olarak yükleyen EF Core SQLite sağlayıcısı.
yapı iskelesi için gereken paketler: Microsoft.VisualStudio.Web.CodeGeneration.Design ve Microsoft.EntityFrameworkCore.SqlServer.
Bir uygulamanın veritabanı bağlamlarını ortama göre yapılandırmasına izin veren birden çok ortam yapılandırmasıyla ilgili yönergeler için bkz . ASP.NET Core'da birden çok ortam kullanma.
Not
Varsayılan olarak yüklenecek .NET ikili dosyalarının mimarisi şu anda çalışan işletim sistemi mimarisini temsil eder. Farklı bir işletim sistemi mimarisi belirtmek için bkz . dotnet tool install, --arch option.
Daha fazla bilgi için bkz. GitHub sorunu dotnet/AspNetCore.Docs #29262.
Çözüm Aracı Penceresi'nde PagesMovie projesine Razorsağ tıklayın ve ardından Yeni Klasör Ekle...'yi>seçin. klasörünü Modelsadlandırın.
Klasöre Models sağ tıklayın ve ardından Yeni Dosya Ekle...'yi>seçin.
Yeni Dosya iletişim kutusunda:
Sol bölmede Genel'i seçin.
Orta bölmede Boş Sınıf'ı seçin.
Sınıfa Movie adını verin ve Oluştur'u seçin.
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ı aşağıdakileri Movie içerir:
ID Veritabanı için birincil anahtar sağlayan alan.
Derleme hatası olmadığını doğrulamak için projeyi derleyin.
Film modelinin iskelesini oluşturma
Bu bölümde, film modeli iskelesi oluşturulmuş. Diğer bir ifadeyle, iskele aracı film modeli için Oluşturma, Okuma, Güncelleştirme ve Silme (CRUD) işlemleri için sayfalar oluşturur.
Sayfalar/Filmler klasörüne> Yeni İskeleli Öğe Ekle'ye>sağ tıklayın.
Yeni İskele Ekle iletişim kutusunda Entity Framework (CRUD)>Ekle'yi kullanan sayfalar'ı seçin.Razor
Entity Framework (CRUD) kullanarak Sayfa Ekle Razor iletişim kutusunu tamamlayın:
Model sınıfı açılan listesinde Film (RazorPagesMovie.Models) öğesini seçin.
Veri bağlamı sınıf satırında (artı) işaretini seçin + .
Veri Bağlamı Ekle iletişim kutusunda sınıf adı RazorPagesMovie.Data.RazorPagesMovieContext oluşturulur.
Ekle'yi seçin.
Paketi yüklemeniz Microsoft.EntityFrameworkCore.SqlServer gerektiğini belirten bir hata iletisi alırsanız, Yeni İskeleli Öğe Ekle'den> başlayarak adımları yineleyin.
Dosya appsettings.json , yerel veritabanına bağlanmak için kullanılan bağlantı dizesiyle güncelleştirilir.
proje dizininde ve .csproj dosyalarını içeren Program.cs bir komut kabuğu açın. Aşağıdaki komutu çalıştırın:
Geliştirme için SQLite, üretim için SQL Server kullanma
SQLite seçildiğinde, şablon tarafından oluşturulan kod geliştirme için hazırdır. Aşağıdaki kod, geliştirmede SQLite bağlantı dizesini ve üretimde SQL Server'ı seçmeyi gösterir.
using Microsoft.EntityFrameworkCore;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
if (builder.Environment.IsDevelopment())
{
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlite(builder.Configuration.GetConnectionString("RazorPagesMovieContext")));
}
else
{
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("ProductionMovieContext")));
}
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
Önceki kod geliştirme modunda çağırdığından WebApplication geliştirmede çağrı UseDeveloperExceptionPageUseDeveloperExceptionPage yapmaz.
Dosya appsettings.json , yerel veritabanına bağlanmak için kullanılan bağlantı dizesiyle güncelleştirilir.
Geliştirme için SQLite, üretim için SQL Server kullanma
SQLite seçildiğinde, şablon tarafından oluşturulan kod geliştirme için hazırdır. Aşağıdaki kod, geliştirmede SQLite bağlantı dizesini ve üretimde SQL Server'ı seçmeyi gösterir.
using Microsoft.EntityFrameworkCore;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
if (builder.Environment.IsDevelopment())
{
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlite(builder.Configuration.GetConnectionString("RazorPagesMovieContext")));
}
else
{
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("ProductionMovieContext")));
}
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
Önceki kod geliştirme modunda çağırdığından WebApplication geliştirmede çağrı UseDeveloperExceptionPageUseDeveloperExceptionPage yapmaz.
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 Dizin oluşturma.
Data/RazorPagesMovieContext.cs
Oluşturulan dosyalar sonraki öğreticide açıklanmıştır.
İskele işlemi dosyaya aşağıdaki vurgulanmış kodu Program.cs 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") ?? throw new InvalidOperationException("Connection string 'RazorPagesMovieContext' not found.")));
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
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();
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.UseSqlite(builder.Configuration.GetConnectionString("RazorPagesMovieContext") ?? throw new InvalidOperationException("Connection string 'RazorPagesMovieContext' not found.")));
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
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();
Değişiklikler Program.cs bu öğreticinin ilerleyen bölümlerinde açıklanmıştır.
EF'nin geçiş özelliğini kullanarak ilk veritabanı şemasını oluşturma
Entity Framework Core'daki geçişler ö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ş durumda tutmak için artımlı olarak güncelleştirin. Veritabanındaki mevcut veriler korunur.
Çözüm Aracı Penceresi'nde PagesMovie projesine Razorsağ tıklayın ve terminalde aç'ı seçin.
Terminal penceresi, Program.cs ve .csproj dosyalarını içeren proje dizininde komut istemiyle açılır.
Aşağıdaki .NET CLI komutlarını çalıştırın:
dotnet tool install --global dotnet-ef
dotnet ef migrations add InitialCreate
dotnet ef database update
Not
Varsayılan olarak yüklenecek .NET ikili dosyalarının mimarisi şu anda çalışan işletim sistemi mimarisini temsil eder. Farklı bir işletim sistemi mimarisi belirtmek için bkz . dotnet tool install, --arch option.
Daha fazla bilgi için bkz. GitHub sorunu dotnet/AspNetCore.Docs #29262.
Not
SQLite için Price , alanın sütun türü olarak TEXTayarlanır. Bu, sonraki bir adımda çözülür.
Önceki komutlar Entity Framework Core araçlarını yükler ve komutunu çalıştırarak ilk veritabanı şemasını migrations oluşturan kodu oluşturur.
Sonraki bir adımda ele alınan aşağıdaki uyarı görüntülenir:
'Movie' varlık türündeki 'Price' ondalık sütunu için tür belirtilmedi. Bu, varsayılan duyarlığa ve ölçeklendirmeye uymayan değerlerin sessizce kesilmesine neden olur. 'HasColumnType()' kullanarak tüm değerleri barındırabilecek SQL server sütun türünü açıkça belirtin.
komutu, migrations ilk veritabanı şemasını oluşturmak için kod oluşturur. Şema, içinde DbContextbelirtilen modeli temel alır. Bağımsız InitialCreate değişken, geçişleri adlandırmak 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 , uygulanmamış geçişlerde yöntemini çalıştırır Up . Bu durumda, update veritabanını oluşturan dosyasında yöntemini Migrations/<time-stamp>_InitialCreate.cs çalıştırırUp.
Bağımlılık ekleme ile kaydedilen bağlamı inceleme
ASP.NET Core, bağımlılık ekleme ile oluşturulur. Veritabanı bağlamı EF Core gibi hizmetler, uygulama başlatma sırasında bağımlılık ekleme ile kaydedilir. Bu hizmetleri gerektiren bileşenler (Sayfalar gibi Razor ) oluşturucu parametreleri aracılığıyla sağlanır. Veritabanı bağlam örneğini alan oluşturucu kodu öğreticinin ilerleyen bölümlerinde gösterilir.
İskele aracı otomatik olarak bir veritabanı bağlamı oluşturup bağımlılık ekleme kapsayıcısıyla kaydetti. Aşağıdaki vurgulanmış kod, iskele tarafından dosyaya Program.cs 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") ?? throw new InvalidOperationException("Connection string 'RazorPagesMovieContext' not found.")));
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
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();
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.UseSqlite(builder.Configuration.GetConnectionString("RazorPagesMovieContext") ?? throw new InvalidOperationException("Connection string 'RazorPagesMovieContext' not found.")));
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
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 modeline hangi varlıkların dahil olduğunu belirtir.
EF Core Model için Oluşturma, Okuma, Güncelleştirme ve Silme gibi işlevleri koordine ederMovie.
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; }
}
}
Yukarıdaki kod, varlık kümesi için bir DbSet<Movie> özelliği oluşturur. Entity Framework terminolojisinde bir varlık kümesi genellikle bir veritabanı tablosuna karşılık gelir. Varlık, tablodaki bir satıra karşılık gelir.
Bağlantı dizesinin adı, DbContextOptions nesnesinde bir yöntem çağrılarak bağlama geçirilir. Yerel geliştirme için Yapılandırma sistemi dosyadan bağlantı dizesini appsettings.json okur.
Uygulamayı sınama
Uygulamayı çalıştırın ve tarayıcıda (http://localhost:port/movies) URL'ye ekleyin/Movies.
Aşağıdaki 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ş adımını kaçırdınız.
Yeni Oluştur bağlantısını test edin.
Not
Alana ondalık virgül Price giremeyebilirsiniz. Ondalık ayırıcı ve ABD İngilizcesi olmayan tarih biçimleri için virgül (",") kullanan İngilizce olmayan yerel ayarlar için jQuery doğrulamasını desteklemek için uygulamanın genelleştirilmesi gerekir. Genelleştirme yönergeleri için bu GitHub sorununa bakı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.
Tamamlanan örnekle ilgili sorun giderme
Çözemediğiniz bir sorunla karşılaşırsanız kodunuzu tamamlanmış projeyle karşılaştırın. Tamamlanan projeyi görüntüleme veya indirme (indirme).
Bu bölümde, bir veritabanındaki filmleri yönetmek 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 basitleştiren bir nesne ilişkisel eşleyicidir (O/RM). Önce model sınıflarını yazar ve EF Core veritabanını oluşturur.
Model sınıfları, üzerinde EF Corebağımlılıkları olmadığından POCO sınıfları ("Plain-O ld CLR Objects" öğesinden) olarak bilinir. Veritabanında depolanan verilerin özelliklerini tanımlar.
Klasöre Models sağ tıklayın. Sınıf Ekle'yi>seçin. Sınıfa Movie adını verin.
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ı aşağıdakileri Movie içerir:
Bu ID alan, 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.
Zaman bilgisi değil, yalnızca tarih görüntülenir.
adlı Modelsbir klasör ekleyin.
adlı Movie.csklasöre Models bir sınıf ekleyin.
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ı aşağıdakileri Movie içerir:
Bu ID alan, 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.
EF Core Paketi bağımlılık olarak yükleyen EF Core SQLite sağlayıcısı.
yapı iskelesi için gereken paketler: Microsoft.VisualStudio.Web.CodeGeneration.Design ve Microsoft.EntityFrameworkCore.SqlServer.
Bir uygulamanın veritabanı bağlamlarını ortama göre yapılandırmasına izin veren birden çok ortam yapılandırmasıyla ilgili yönergeler için bkz . ASP.NET Core'da birden çok ortam kullanma.
Not
Varsayılan olarak yüklenecek .NET ikili dosyalarının mimarisi şu anda çalışan işletim sistemi mimarisini temsil eder. Farklı bir işletim sistemi mimarisi belirtmek için bkz . dotnet tool install, --arch option.
Daha fazla bilgi için bkz. GitHub sorunu dotnet/AspNetCore.Docs #29262.
yapı iskelesi hatası alırsanız, Hedef Çerçeve Takma Adı'nın (TFM) proje dosyasındaki NuGet paket sürümüyle eşleşip eşleşmediğini doğrulayın. Örneğin, aşağıdaki proje dosyası .NET için sürüm 5.0'ı ve listelenen NuGet paketlerini kullanır:
Çözüm Aracı Penceresinde, PagesMovie projesine control tuşunaRazor basılı tuşlarına tıklayıp Yeni Klasör Ekle>... seçeneğini belirleyin. klasörünü Modelsadlandırın.
Klasöre Control tuşuyla Models tıklayın ve ardından Yeni Dosya Ekle...'yi>seçin.
Yeni Dosya iletişim kutusunda:
Sol bölmede Genel'i seçin.
Orta bölmede Boş Sınıf'ı seçin.
Sınıfa Movie adını verin ve Yeni'yi seçin.
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ı aşağıdakileri Movie içerir:
Bu ID alan, 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.
Derleme hatası olmadığını doğrulamak için projeyi derleyin.
Film modelinin iskelesini oluşturma
Bu bölümde, film modeli iskelesi oluşturulmuş. Diğer bir ifadeyle, iskele aracı film modeli için Oluşturma, Okuma, Güncelleştirme ve Silme (CRUD) işlemleri için sayfalar oluşturur.
Geliştirme için SQLite, üretim için SQL Server kullanma
SQLite seçildiğinde, şablon tarafından oluşturulan kod geliştirme için hazırdır. Aşağıdaki kod içine Startupekleme işlemini IWebHostEnvironment gösterir. IWebHostEnvironment eklenir, böylece ConfigureServices geliştirmede SQLite ve üretimde SQL Server kullanılabilir.
public class Startup
{
public Startup(IConfiguration configuration, IWebHostEnvironment env)
{
Environment = env;
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public IWebHostEnvironment Environment { get; }
public void ConfigureServices(IServiceCollection services)
{
if (Environment.IsDevelopment())
{
services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlite(
Configuration.GetConnectionString("RazorPagesMovieContext")));
}
else
{
services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("MovieContext")));
}
services.AddRazorPages();
}
public void Configure(IApplicationBuilder app)
{
if (Environment.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
});
}
}
Sayfalar/Filmler klasörü oluşturma:
Yeni Klasör Ekle Sayfalar klasörüne Control tuşuna >basılı tarayarak>tıklayın.
Klasöre Filmler adını verin.
Yeni İskele Ekle>Sayfalar/Filmler klasörüne Control tuşuna >basılı tarayarak tıklayın....
Yeni yapı iskelesi iletişim kutusunda Entity Framework (CRUD)Next kullanan sayfalar'ı> seçin.Razor
Entity Framework (CRUD) kullanarak Sayfa Ekle Razor iletişim kutusunu tamamlayın:
Dosya appsettings.json , yerel veritabanına bağlanmak için kullanılan bağlantı dizesiyle güncelleştirilir.
Geliştirme için SQLite, üretim için SQL Server kullanma
SQLite seçildiğinde, şablon tarafından oluşturulan kod geliştirme için hazırdır. Aşağıdaki kod içine Startupekleme işlemini IWebHostEnvironment gösterir. IWebHostEnvironment eklenir, böylece ConfigureServices geliştirmede SQLite ve üretimde SQL Server kullanılabilir.
public class Startup
{
public Startup(IConfiguration configuration, IWebHostEnvironment env)
{
Environment = env;
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public IWebHostEnvironment Environment { get; }
public void ConfigureServices(IServiceCollection services)
{
if (Environment.IsDevelopment())
{
services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlite(
Configuration.GetConnectionString("RazorPagesMovieContext")));
}
else
{
services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("MovieContext")));
}
services.AddRazorPages();
}
public void Configure(IApplicationBuilder app)
{
if (Environment.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
});
}
}
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 Dizin oluşturma.
Data/RazorPagesMovieContext.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'daki geçişler ö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ş durumda tutmak için artımlı olarak güncelleştirin. Veritabanındaki mevcut veriler korunur.
dotnet ef migrations add InitialCreate
dotnet ef database update
Not
SQLite için Price , alanın sütun türü olarak TEXTayarlanır. Bu, sonraki bir adımda çözülür.
SQL Server için, önceki 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ığa ve ölçeklendirmeye uymayan değerlerin sessizce kesilmesine neden olur. 'HasColumnType()' kullanarak tüm değerleri barındırabilecek SQL server sütun türünü açıkça belirtin."
Sonraki bir adımda ele alınacağı için uyarıyı yoksayın.
komutu, migrations ilk veritabanı şemasını oluşturmak için kod oluşturur. Şema, içinde DbContextbelirtilen modeli temel alır. Bağımsız InitialCreate değişken, geçişleri adlandırmak 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 , uygulanmamış geçişlerde yöntemini çalıştırır Up . Bu durumda, update veritabanını oluşturan dosyasında yöntemini Migrations/<time-stamp>_InitialCreate.cs çalıştırırUp.
ASP.NET Core, bağımlılık ekleme ile oluşturulur. Veritabanı bağlamı EF Core gibi hizmetler, uygulama başlatma sırasında bağımlılık ekleme ile kaydedilir. Bu hizmetleri gerektiren bileşenler (Sayfalar gibi Razor ) oluşturucu parametreleri aracılığıyla sağlanır. Veritabanı bağlam örneğini alan oluşturucu kodu öğreticinin ilerleyen bölümlerinde gösterilir.
İskele aracı otomatik olarak bir veritabanı bağlamı oluşturup bağımlılık ekleme kapsayıcısıyla kaydetti.
Startup.ConfigureServices yöntemini inceleyin. Vurgulanan çizgi iskele tarafından eklendi:
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("RazorPagesMovieContext")));
}
RazorPagesMovieContext Model için Movie Oluşturma, Okuma, Güncelleştirme ve Silme gibi koordinat EF Core işlevselliği. Veri bağlamı (RazorPagesMovieContext), Microsoft.EntityFrameworkCore.DbContext'ten türetilir. 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. Entity Framework terminolojisinde bir varlık kümesi genellikle bir veritabanı tablosuna karşılık gelir. Varlık, tablodaki bir satıra karşılık gelir.
Bağlantı dizesinin adı, DbContextOptions nesnesinde bir yöntem çağrılarak bağlama geçirilir. Yerel geliştirme için Yapılandırma sistemi dosyadan bağlantı dizesini appsettings.json okur.
Up yöntemini inceleyin.
Uygulamayı sınama
Uygulamayı çalıştırın ve tarayıcıda (http://localhost:port/movies) URL'ye ekleyin/Movies.
Aşağıdaki 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ş adımını kaçırdınız.
Oluştur bağlantısını test edin.
Not
Alana ondalık virgül Price giremeyebilirsiniz. Ondalık ayırıcı ve ABD İngilizcesi olmayan tarih biçimleri için virgül (",") kullanan İngilizce olmayan yerel ayarlar için jQuery doğrulamasını desteklemek için uygulamanın genelleştirilmesi gerekir. Genelleştirme yönergeleri için bu GitHub sorununa bakın.
Düzenle, Ayrıntılar ve Sil bağlantılarını test edin.
Entity Framework Core'un SQL Günlüğü
Günlük yapılandırması genellikle appsettings.{Environment}.json dosyalarının Logging bölümü tarafından sağlanır. SQL deyimlerini günlüğe kaydetmek için appsettings.Development.json dosyasına ekleyin"Microsoft.EntityFrameworkCore.Database.Command": "Information":
Bu bölümde, filmleri yönetmek 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 basitleştiren bir nesne ilişkisel eşleyicidir (O/RM).
Model sınıfları, üzerinde EF Coreherhangi bir bağımlılığı olmadığından POCO sınıfları ("düz eski CLR nesnelerinden") olarak bilinir. Veritabanında depolanan verilerin özelliklerini tanımlar.
Klasöre Models sağ tıklayın. Sınıf Ekle'yi>seçin. Sınıfa Movie adını verin.
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ı aşağıdakileri Movie içerir:
Bu ID alan, 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.
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ı aşağıdakileri Movie içerir:
Bu ID alan, 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.
.NET Core CLI için Entity Framework Core Araçları.
EF Core Paketi bağımlılık olarak yükleyen EF Core SQLite sağlayıcısı.
yapı iskelesi için gereken paketler: Microsoft.VisualStudio.Web.CodeGeneration.Design ve Microsoft.EntityFrameworkCore.SqlServer.
Bir uygulamanın veritabanı bağlamlarını ortama göre yapılandırmasına izin veren birden çok ortam yapılandırmasıyla ilgili yönergeler için bkz . ASP.NET Core'da birden çok ortam kullanma.
Not
Varsayılan olarak yüklenecek .NET ikili dosyalarının mimarisi şu anda çalışan işletim sistemi mimarisini temsil eder. Farklı bir işletim sistemi mimarisi belirtmek için bkz . dotnet tool install, --arch option.
Daha fazla bilgi için bkz. GitHub sorunu dotnet/AspNetCore.Docs #29262.
yapı iskelesi hatası alırsanız, Hedef Çerçeve Takma Adı'nın (TFM) proje dosyasındaki NuGet paket sürümüyle eşleşip eşleşmediğini doğrulayın. Örneğin, aşağıdaki proje dosyası .NET Core için 3.1 sürümünü ve listelenen NuGet paketlerini içerir:
PagesMovie projesindeRazor Data adlı yeni bir klasör oluşturun.
Aşağıdaki RazorPagesMovieContext sınıfı Data klasörüne ekleyin:
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 özellik oluşturur. Entity Framework terminolojisinde varlık kümesi genellikle bir veritabanı tablosuna, varlık ise tablodaki bir satıra karşılık gelir. Kod, bağımlılıklar sonraki bir adımda eklenene kadar derlenmez.
Veritabanı bağlantı dizesi ekleme
Aşağıdaki vurgulanmış kodda gösterildiği gibi dosyaya appsettings.json bir bağlantı dizesi ekleyin:
öğesinin en üstüne Startup.csaşağıdaki using deyimleri ekleyin:
using RazorPagesMovie.Data;
using Microsoft.EntityFrameworkCore;
veritabanı bağlamını içindeki Startup.ConfigureServicesbağımlılık ekleme kapsayıcısıyla kaydedin.
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlite(Configuration.GetConnectionString("RazorPagesMovieContext")));
}
Çözüm Aracı Penceresinde, PagesMovie projesine control tuşunaRazor basılı tuşlarına tıklayıp Yeni Klasör Ekle>... seçeneğini belirleyin. klasörünü Modelsadlandırın.
Klasöre Models sağ tıklayın ve ardından Yeni Dosya Ekle...'yi>seçin.
Yeni Dosya iletişim kutusunda:
Sol bölmede Genel'i seçin.
Orta bölmede Boş Sınıf'ı seçin.
Sınıfa Movie adını verin ve Yeni'yi seçin.
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ı aşağıdakileri Movie içerir:
Bu ID alan, 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.
Derleme hatası olmadığını doğrulamak için projeyi derleyin.
Film modelinin iskelesini oluşturma
Bu bölümde, film modeli iskelesi oluşturulmuş. Diğer bir ifadeyle, iskele aracı film modeli için Oluşturma, Okuma, Güncelleştirme ve Silme (CRUD) işlemleri için sayfalar oluşturur.
Sayfalar/Filmler klasörüne> Yeni İskeleli Öğe Ekle'ye>sağ tıklayın.
yapı iskelesi ekle iletişim kutusunda Entity Framework (CRUD)>Add kullanan sayfalar'ı seçin.Razor
Entity Framework (CRUD) kullanarak Sayfa Ekle Razor iletişim kutusunu tamamlayın:
Model sınıfı açılan listesinde Film (RazorPagesMovie.Models) öğesini seçin.
Veri bağlamı sınıf satırında (artı) işaretini seçin + ve Oluşturulan adı RazorPagesMovie.Models.RazorPagesMovieContext to RazorPagesMovie.Veriler.RazorPagesMovieContext. Bu değişiklik gerekli değildir. Doğru ad alanına sahip veritabanı bağlam sınıfını oluşturur.
Ekle'yi seçin.
Dosya appsettings.json , yerel veritabanına bağlanmak için kullanılan bağlantı dizesiyle güncelleştirilir.
Proje dizininde , Startup.csve .csproj dosyalarını içeren Program.csbir komut penceresi açın.
Geliştirme için SQLite, üretim için SQL Server kullanma
SQLite seçildiğinde, şablon tarafından oluşturulan kod geliştirme için hazırdır. Aşağıdaki kod, Başlangıç'a nasıl ekleme yapılacağını IWebHostEnvironment gösterir. IWebHostEnvironment eklenir, böylece ConfigureServices geliştirmede SQLite ve üretimde SQL Server kullanılabilir.
public class Startup
{
public Startup(IConfiguration configuration, IWebHostEnvironment env)
{
Environment = env;
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public IWebHostEnvironment Environment { get; }
public void ConfigureServices(IServiceCollection services)
{
if (Environment.IsDevelopment())
{
services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlite(
Configuration.GetConnectionString("RazorPagesMovieContext")));
}
else
{
services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("MovieContext")));
}
services.AddRazorPages();
}
public void Configure(IApplicationBuilder app)
{
if (Environment.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseDatabaseErrorPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
});
}
}
Sayfalar/Filmler klasörüne >Sağ tıklayın Yeni İskele Ekle>....
Yeni yapı iskelesi iletişim kutusunda Entity Framework (CRUD)Next kullanan sayfalar'ı> seçin.Razor
Entity Framework (CRUD) kullanarak Sayfa Ekle Razor iletişim kutusunu tamamlayın:
Model sınıfı açılan listesinde Film (RazorPagesMovie.Models) öğesini seçin veya yazın.
Veri bağlamı sınıfı satırına yeni sınıfın Razoradını (PagesMovie) yazın.Veriler.RazorPagesMovieContext. Bu değişiklik gerekli değildir. Doğru ad alanına sahip veritabanı bağlam sınıfını oluşturur.
Ekle'yi seçin.
Dosya appsettings.json , yerel veritabanına bağlanmak için kullanılan bağlantı dizesiyle güncelleştirilir.
Varsayılan olarak yüklenecek .NET ikili dosyalarının mimarisi şu anda çalışan işletim sistemi mimarisini temsil eder. Farklı bir işletim sistemi mimarisi belirtmek için bkz . dotnet tool install, --arch option.
Daha fazla bilgi için bkz. GitHub sorunu dotnet/AspNetCore.Docs #29262.
Geliştirme için SQLite, üretim için SQL Server kullanma
SQLite seçildiğinde, şablon tarafından oluşturulan kod geliştirme için hazırdır. Aşağıdaki kod, Başlangıç'a nasıl ekleme yapılacağını IWebHostEnvironment gösterir. IWebHostEnvironment eklenir, böylece ConfigureServices geliştirmede SQLite ve üretimde SQL Server kullanılabilir.
public class Startup
{
public Startup(IConfiguration configuration, IWebHostEnvironment env)
{
Environment = env;
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public IWebHostEnvironment Environment { get; }
public void ConfigureServices(IServiceCollection services)
{
if (Environment.IsDevelopment())
{
services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlite(
Configuration.GetConnectionString("RazorPagesMovieContext")));
}
else
{
services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("MovieContext")));
}
services.AddRazorPages();
}
public void Configure(IApplicationBuilder app)
{
if (Environment.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseDatabaseErrorPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
});
}
}
Yüklenmemişse dotnet ef genel bir araç olarak yükleyin:
dotnet tool install --global dotnet-ef
için CLI hakkında daha fazla bilgi için EF Corebkz EF Core . .NET CLI için araç başvurusu.
Not
Varsayılan olarak yüklenecek .NET ikili dosyalarının mimarisi şu anda çalışan işletim sistemi mimarisini temsil eder. Farklı bir işletim sistemi mimarisi belirtmek için bkz . dotnet tool install, --arch option.
Daha fazla bilgi için bkz. GitHub sorunu dotnet/AspNetCore.Docs #29262.
Aşağıdaki .NET Core CLI komutlarını çalıştırın:
dotnet ef migrations add InitialCreate
dotnet ef database update
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ığa ve ölçeklendirmeye uymayan değerlerin sessizce kesilmesine neden olur. 'HasColumnType()' kullanarak tüm değerleri barındırabilecek SQL server sütun türünü açıkça belirtin."
Sonraki bir adımda ele alınacağı için uyarıyı yoksayın.
Migrations komutu, ilk veritabanı şemasını oluşturmak için kod oluşturur. Şema, içinde DbContextbelirtilen modeli temel alır. Bağımsız InitialCreate değişken, geçişleri adlandırmak 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 , uygulanmamış geçişlerde yöntemini çalıştırır Up . Bu durumda, update veritabanını oluşturan dosyasında yöntemini Migrations/<time-stamp>_InitialCreate.cs çalıştırırUp.
ASP.NET Core, bağımlılık ekleme ile oluşturulur. Veritabanı bağlamı EF Core gibi hizmetler, uygulama başlatma sırasında bağımlılık ekleme ile kaydedilir. Sayfalar gibi Razor bu hizmetleri gerektiren bileşenler oluşturucu parametreleri aracılığıyla sağlanır. Veritabanı bağlam örneğini alan oluşturucu kodu öğreticinin ilerleyen bölümlerinde gösterilir.
İskele aracı otomatik olarak bir veritabanı bağlamı oluşturup bağımlılık ekleme kapsayıcısıyla kaydetti.
Startup.ConfigureServices yöntemini inceleyin. Vurgulanan çizgi iskele tarafından eklendi:
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("RazorPagesMovieContext")));
}
RazorPagesMovieContext Model için Movie Oluşturma, Okuma, Güncelleştirme ve Silme gibi koordinat EF Core işlevselliği. Veri bağlamı (RazorPagesMovieContext), Microsoft.EntityFrameworkCore.DbContext'ten türetilir. 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. Entity Framework terminolojisinde bir varlık kümesi genellikle bir veritabanı tablosuna karşılık gelir. Varlık, tablodaki bir satıra karşılık gelir.
Bağlantı dizesinin adı, DbContextOptions nesnesinde bir yöntem çağrılarak bağlama geçirilir. Yerel geliştirme için Yapılandırma sistemi dosyadan bağlantı dizesini appsettings.json okur.
Up yöntemini inceleyin.
Uygulamayı sınama
Uygulamayı çalıştırın ve tarayıcıda (http://localhost:port/movies) URL'ye ekleyin/Movies.
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ş adımını kaçırdınız.
Oluştur bağlantısını test edin.
Not
Alana ondalık virgül Price giremeyebilirsiniz. Ondalık ayırıcı ve ABD İngilizcesi olmayan tarih biçimleri için virgül (",") kullanan İngilizce olmayan yerel ayarlar için jQuery doğrulamasını desteklemek için uygulamanın genelleştirilmesi gerekir. Genelleştirme yönergeleri için bu GitHub sorununa bakı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.