Sayfalar'da Razor öğretici serisinin 4. bölümü
Uyarı
ASP.NET Core'un bu sürümü artık desteklenmiyor. Daha fazla bilgi için bkz . .NET ve .NET Core Destek İlkesi. Geçerli sürüm için bu makalenin .NET 8 sürümüne bakın.
Tarafından Joe Audette
RazorPagesMovieContext
nesnesi, veritabanına bağlanma ve nesneleri veritabanı kayıtlarına eşleme Movie
görevini işler. Veritabanı bağlamı içindeki Bağımlılık Ekleme kapsayıcısıyla Program.cs
kaydedilir:
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.")));
ASP.NET Çekirdek Yapılandırma sistemi anahtarı okur ConnectionString
. Yerel geliştirme için yapılandırma dosyasından bağlantı dizesi appsettings.json
alır.
Oluşturulan bağlantı dizesi aşağıdaki JSON'a benzer:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"RazorPagesMovieContext": "Server=(localdb)\\mssqllocaldb;Database=RazorPagesMovieContext-f2e0482c-952d-4b1c-afe9-a1a3dfe52e55;Trusted_Connection=True;MultipleActiveResultSets=true"
}
}
Uyarı
Bu makalede, kullanıcının kimliğinin doğrulanması gerekmeyen bir yerel veritabanı kullanılır. Üretim uygulamaları kullanılabilir en güvenli kimlik doğrulama akışını kullanmalıdır. Dağıtılan test ve üretim uygulamaları için kimlik doğrulaması hakkında daha fazla bilgi için bkz . Güvenli kimlik doğrulama akışları.
SQL Server Express LocalDB
LocalDB, SQL Server Express veritabanı altyapısının program geliştirme için hedeflenen basit bir sürümüdür. LocalDB isteğe bağlı olarak başlar ve kullanıcı modunda çalışır, bu nedenle karmaşık bir yapılandırma yoktur. Varsayılan olarak, LocalDB veritabanı dizinde C:\Users\<user>\
dosyalar oluşturur*.mdf
.
Görünüm menüsünden SQL Server Nesne Gezgini (SSOX) öğesini açın.
Tabloya sağ tıklayın ve Görünüm Tasarımcısı'nı
Movie
seçin:öğesinin yanındaki tuş simgesine
ID
dikkat edin. Varsayılan olarak EF, birincil anahtar için adlıID
bir özellik oluşturur.Tabloya
Movie
sağ tıklayın ve Verileri Görüntüle'yi seçin:
Veritabanının tohumunu oluşturma
Models klasöründe aşağıdaki kodla adlı SeedData
yeni bir sınıf oluşturun:
using Microsoft.EntityFrameworkCore;
using RazorPagesMovie.Data;
namespace RazorPagesMovie.Models;
public static class SeedData
{
public static void Initialize(IServiceProvider serviceProvider)
{
using (var context = new RazorPagesMovieContext(
serviceProvider.GetRequiredService<
DbContextOptions<RazorPagesMovieContext>>()))
{
if (context == null || context.Movie == null)
{
throw new ArgumentNullException("Null RazorPagesMovieContext");
}
// Look for any movies.
if (context.Movie.Any())
{
return; // DB has been seeded
}
context.Movie.AddRange(
new Movie
{
Title = "When Harry Met Sally",
ReleaseDate = DateTime.Parse("1989-2-12"),
Genre = "Romantic Comedy",
Price = 7.99M
},
new Movie
{
Title = "Ghostbusters ",
ReleaseDate = DateTime.Parse("1984-3-13"),
Genre = "Comedy",
Price = 8.99M
},
new Movie
{
Title = "Ghostbusters 2",
ReleaseDate = DateTime.Parse("1986-2-23"),
Genre = "Comedy",
Price = 9.99M
},
new Movie
{
Title = "Rio Bravo",
ReleaseDate = DateTime.Parse("1959-4-15"),
Genre = "Western",
Price = 3.99M
}
);
context.SaveChanges();
}
}
}
Veritabanında herhangi bir film varsa, tohum başlatıcısı döner ve film eklenmez.
if (context.Movie.Any())
{
return;
}
Tohum başlatıcıyı ekleme
öğesini Program.cs
aşağıdaki vurgulanmış kodla güncelleştirin:
using Microsoft.EntityFrameworkCore;
using RazorPagesMovie.Data;
using RazorPagesMovie.Models;
var builder = WebApplication.CreateBuilder(args);
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();
using (var scope = app.Services.CreateScope())
{
var services = scope.ServiceProvider;
SeedData.Initialize(services);
}
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
app.MapStaticAssets();
app.MapRazorPages();
app.Run();
Önceki kodda, Program.cs
aşağıdakileri yapacak şekilde değiştirildi:
- Bağımlılık ekleme (DI) kapsayıcısından bir veritabanı bağlam örneği alın.
seedData.Initialize
yöntemini çağırarak veritabanı bağlam örneğini geçirin.- Seed yöntemi tamamlandığında bağlamı atın. using deyimi, bağlamın atılmasını sağlar.
Aşağıdaki özel durum çalıştırılmadığında Update-Database
oluşur:
SqlException: Cannot open database "RazorPagesMovieContext-" requested by the login. The login failed.
Login failed for user 'user name'.
Uygulamayı test etme
Tohum yönteminin çalışması için veritabanındaki tüm kayıtları silin. Veritabanının tohumlarını oluşturmak için uygulamayı durdurun ve başlatın. Veritabanı dağıtılmıyorsa, bir kesme noktası if (context.Movie.Any())
koyun ve kodda adım adım ilerleyin.
Uygulama, dağıtılmış verileri gösterir:
Sonraki adımlar
RazorPagesMovieContext
nesnesi, veritabanına bağlanma ve nesneleri veritabanı kayıtlarına eşleme Movie
görevini işler. Veritabanı bağlamı içindeki Bağımlılık Ekleme kapsayıcısıyla Program.cs
kaydedilir:
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();
ASP.NET Çekirdek Yapılandırma sistemi anahtarı okur ConnectionString
. Yerel geliştirme için yapılandırma dosyasından bağlantı dizesi appsettings.json
alır.
Oluşturulan bağlantı dizesi aşağıdaki JSON'a benzer:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"RazorPagesMovieContext": "Server=(localdb)\\mssqllocaldb;Database=RazorPagesMovieContext-bc;Trusted_Connection=True;MultipleActiveResultSets=true"
}
}
Uyarı
Bu makalede, kullanıcının kimliğinin doğrulanması gerekmeyen bir yerel veritabanı kullanılır. Üretim uygulamaları kullanılabilir en güvenli kimlik doğrulama akışını kullanmalıdır. Dağıtılan test ve üretim uygulamaları için kimlik doğrulaması hakkında daha fazla bilgi için bkz . Güvenli kimlik doğrulama akışları.
SQL Server Express LocalDB
LocalDB, SQL Server Express veritabanı altyapısının program geliştirme için hedeflenen basit bir sürümüdür. LocalDB isteğe bağlı olarak başlar ve kullanıcı modunda çalışır, bu nedenle karmaşık bir yapılandırma yoktur. Varsayılan olarak, LocalDB veritabanı dizinde C:\Users\<user>\
dosyalar oluşturur*.mdf
.
Görünüm menüsünden SQL Server Nesne Gezgini (SSOX) öğesini açın.
Tabloya sağ tıklayın ve Görünüm Tasarımcısı'nı
Movie
seçin:öğesinin yanındaki tuş simgesine
ID
dikkat edin. Varsayılan olarak EF, birincil anahtar için adlıID
bir özellik oluşturur.Tabloya
Movie
sağ tıklayın ve Verileri Görüntüle'yi seçin:
Veritabanının tohumunu oluşturma
Models klasöründe aşağıdaki kodla adlı SeedData
yeni bir sınıf oluşturun:
using Microsoft.EntityFrameworkCore;
using RazorPagesMovie.Data;
namespace RazorPagesMovie.Models;
public static class SeedData
{
public static void Initialize(IServiceProvider serviceProvider)
{
using (var context = new RazorPagesMovieContext(
serviceProvider.GetRequiredService<
DbContextOptions<RazorPagesMovieContext>>()))
{
if (context == null || context.Movie == null)
{
throw new ArgumentNullException("Null RazorPagesMovieContext");
}
// Look for any movies.
if (context.Movie.Any())
{
return; // DB has been seeded
}
context.Movie.AddRange(
new Movie
{
Title = "When Harry Met Sally",
ReleaseDate = DateTime.Parse("1989-2-12"),
Genre = "Romantic Comedy",
Price = 7.99M
},
new Movie
{
Title = "Ghostbusters ",
ReleaseDate = DateTime.Parse("1984-3-13"),
Genre = "Comedy",
Price = 8.99M
},
new Movie
{
Title = "Ghostbusters 2",
ReleaseDate = DateTime.Parse("1986-2-23"),
Genre = "Comedy",
Price = 9.99M
},
new Movie
{
Title = "Rio Bravo",
ReleaseDate = DateTime.Parse("1959-4-15"),
Genre = "Western",
Price = 3.99M
}
);
context.SaveChanges();
}
}
}
Veritabanında herhangi bir film varsa, tohum başlatıcısı döner ve film eklenmez.
if (context.Movie.Any())
{
return;
}
Tohum başlatıcıyı ekleme
öğesini Program.cs
aşağıdaki vurgulanmış kodla güncelleştirin:
using Microsoft.EntityFrameworkCore;
using RazorPagesMovie.Data;
using RazorPagesMovie.Models;
var builder = WebApplication.CreateBuilder(args);
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();
using (var scope = app.Services.CreateScope())
{
var services = scope.ServiceProvider;
SeedData.Initialize(services);
}
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
Önceki kodda, Program.cs
aşağıdakileri yapacak şekilde değiştirildi:
- Bağımlılık ekleme (DI) kapsayıcısından bir veritabanı bağlam örneği alın.
seedData.Initialize
yöntemini çağırarak veritabanı bağlam örneğini geçirin.- Seed yöntemi tamamlandığında bağlamı atın. using deyimi, bağlamın atılmasını sağlar.
Aşağıdaki özel durum çalıştırılmadığında Update-Database
oluşur:
SqlException: Cannot open database "RazorPagesMovieContext-" requested by the login. The login failed.
Login failed for user 'user name'.
Uygulamayı test etme
Tohum yönteminin çalışması için veritabanındaki tüm kayıtları silin. Veritabanının tohumlarını oluşturmak için uygulamayı durdurun ve başlatın. Veritabanı dağıtılmıyorsa, bir kesme noktası if (context.Movie.Any())
koyun ve kodda adım adım ilerleyin.
Uygulama, dağıtılmış verileri gösterir:
Sonraki adımlar
RazorPagesMovieContext
nesnesi, veritabanına bağlanma ve nesneleri veritabanı kayıtlarına eşleme Movie
görevini işler. Veritabanı bağlamı içindeki Bağımlılık Ekleme kapsayıcısıyla Program.cs
kaydedilir:
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();
ASP.NET Çekirdek Yapılandırma sistemi anahtarı okur ConnectionString
. Yerel geliştirme için yapılandırma dosyasından bağlantı dizesi appsettings.json
alır.
Oluşturulan bağlantı dizesi aşağıdaki JSON'a benzer:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"RazorPagesMovieContext": "Server=(localdb)\\mssqllocaldb;Database=RazorPagesMovieContext-bc;Trusted_Connection=True;MultipleActiveResultSets=true"
}
}
Uyarı
Bu makalede, kullanıcının kimliğinin doğrulanması gerekmeyen bir yerel veritabanı kullanılır. Üretim uygulamaları kullanılabilir en güvenli kimlik doğrulama akışını kullanmalıdır. Dağıtılan test ve üretim uygulamaları için kimlik doğrulaması hakkında daha fazla bilgi için bkz . Güvenli kimlik doğrulama akışları.
SQL Server Express LocalDB
LocalDB, SQL Server Express veritabanı altyapısının program geliştirme için hedeflenen basit bir sürümüdür. LocalDB isteğe bağlı olarak başlar ve kullanıcı modunda çalışır, bu nedenle karmaşık bir yapılandırma yoktur. Varsayılan olarak, LocalDB veritabanı dizinde C:\Users\<user>\
dosyalar oluşturur*.mdf
.
Görünüm menüsünden SQL Server Nesne Gezgini (SSOX) öğesini açın.
Tabloya sağ tıklayın ve Görünüm Tasarımcısı'nı
Movie
seçin:öğesinin yanındaki tuş simgesine
ID
dikkat edin. Varsayılan olarak EF, birincil anahtar için adlıID
bir özellik oluşturur.Tabloya
Movie
sağ tıklayın ve Verileri Görüntüle'yi seçin:
Veritabanının tohumunu oluşturma
Models klasöründe aşağıdaki kodla adlı SeedData
yeni bir sınıf oluşturun:
using Microsoft.EntityFrameworkCore;
using RazorPagesMovie.Data;
namespace RazorPagesMovie.Models;
public static class SeedData
{
public static void Initialize(IServiceProvider serviceProvider)
{
using (var context = new RazorPagesMovieContext(
serviceProvider.GetRequiredService<
DbContextOptions<RazorPagesMovieContext>>()))
{
if (context == null || context.Movie == null)
{
throw new ArgumentNullException("Null RazorPagesMovieContext");
}
// Look for any movies.
if (context.Movie.Any())
{
return; // DB has been seeded
}
context.Movie.AddRange(
new Movie
{
Title = "When Harry Met Sally",
ReleaseDate = DateTime.Parse("1989-2-12"),
Genre = "Romantic Comedy",
Price = 7.99M
},
new Movie
{
Title = "Ghostbusters ",
ReleaseDate = DateTime.Parse("1984-3-13"),
Genre = "Comedy",
Price = 8.99M
},
new Movie
{
Title = "Ghostbusters 2",
ReleaseDate = DateTime.Parse("1986-2-23"),
Genre = "Comedy",
Price = 9.99M
},
new Movie
{
Title = "Rio Bravo",
ReleaseDate = DateTime.Parse("1959-4-15"),
Genre = "Western",
Price = 3.99M
}
);
context.SaveChanges();
}
}
}
Veritabanında herhangi bir film varsa, tohum başlatıcısı döner ve film eklenmez.
if (context.Movie.Any())
{
return;
}
Tohum başlatıcıyı ekleme
öğesini Program.cs
aşağıdaki vurgulanmış kodla güncelleştirin:
using Microsoft.EntityFrameworkCore;
using RazorPagesMovie.Data;
using RazorPagesMovie.Models;
var builder = WebApplication.CreateBuilder(args);
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();
using (var scope = app.Services.CreateScope())
{
var services = scope.ServiceProvider;
SeedData.Initialize(services);
}
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
Önceki kodda, Program.cs
aşağıdakileri yapacak şekilde değiştirildi:
- Bağımlılık ekleme (DI) kapsayıcısından bir veritabanı bağlam örneği alın.
seedData.Initialize
yöntemini çağırarak veritabanı bağlam örneğini geçirin.- Seed yöntemi tamamlandığında bağlamı atın. using deyimi, bağlamın atılmasını sağlar.
Aşağıdaki özel durum çalıştırılmadığında Update-Database
oluşur:
SqlException: Cannot open database "RazorPagesMovieContext-" requested by the login. The login failed.
Login failed for user 'user name'.
Uygulamayı test etme
Tohum yönteminin çalışması için veritabanındaki tüm kayıtları silin. Veritabanının tohumlarını oluşturmak için uygulamayı durdurun ve başlatın. Veritabanı dağıtılmıyorsa, bir kesme noktası if (context.Movie.Any())
koyun ve kodda adım adım ilerleyin.
Uygulama, dağıtılmış verileri gösterir:
Sonraki adımlar
RazorPagesMovieContext
nesnesi, veritabanına bağlanma ve nesneleri veritabanı kayıtlarına eşleme Movie
görevini işler. Veritabanı bağlamı içindeki Bağımlılık Ekleme kapsayıcısıyla Program.cs
kaydedilir:
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();
ASP.NET Çekirdek Yapılandırma sistemi anahtarı okur ConnectionString
. Yerel geliştirme için yapılandırma dosyasından bağlantı dizesi appsettings.json
alır.
Oluşturulan bağlantı dizesi aşağıdaki JSON'a benzer:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"RazorPagesMovieContext": "Server=(localdb)\\mssqllocaldb;Database=RazorPagesMovieContext-bc;Trusted_Connection=True;MultipleActiveResultSets=true"
}
}
Uyarı
Bu makalede, kullanıcının kimliğinin doğrulanması gerekmeyen bir yerel veritabanı kullanılır. Üretim uygulamaları kullanılabilir en güvenli kimlik doğrulama akışını kullanmalıdır. Dağıtılan test ve üretim uygulamaları için kimlik doğrulaması hakkında daha fazla bilgi için bkz . Güvenli kimlik doğrulama akışları.
SQL Server Express LocalDB
LocalDB, SQL Server Express veritabanı altyapısının program geliştirme için hedeflenen basit bir sürümüdür. LocalDB isteğe bağlı olarak başlar ve kullanıcı modunda çalışır, bu nedenle karmaşık bir yapılandırma yoktur. Varsayılan olarak, LocalDB veritabanı dizinde C:\Users\<user>\
dosyalar oluşturur*.mdf
.
Görünüm menüsünden SQL Server Nesne Gezgini (SSOX) öğesini açın.
Tabloya sağ tıklayın ve Görünüm Tasarımcısı'nı
Movie
seçin:öğesinin yanındaki tuş simgesine
ID
dikkat edin. Varsayılan olarak EF, birincil anahtar için adlıID
bir özellik oluşturur.Tabloya
Movie
sağ tıklayın ve Verileri Görüntüle'yi seçin:
Veritabanının tohumunu oluşturma
Models klasöründe aşağıdaki kodla adlı SeedData
yeni bir sınıf oluşturun:
using Microsoft.EntityFrameworkCore;
using RazorPagesMovie.Data;
namespace RazorPagesMovie.Models
{
public static class SeedData
{
public static void Initialize(IServiceProvider serviceProvider)
{
using (var context = new RazorPagesMovieContext(
serviceProvider.GetRequiredService<
DbContextOptions<RazorPagesMovieContext>>()))
{
if (context == null || context.Movie == null)
{
throw new ArgumentNullException("Null RazorPagesMovieContext");
}
// Look for any movies.
if (context.Movie.Any())
{
return; // DB has been seeded
}
context.Movie.AddRange(
new Movie
{
Title = "When Harry Met Sally",
ReleaseDate = DateTime.Parse("1989-2-12"),
Genre = "Romantic Comedy",
Price = 7.99M
},
new Movie
{
Title = "Ghostbusters ",
ReleaseDate = DateTime.Parse("1984-3-13"),
Genre = "Comedy",
Price = 8.99M
},
new Movie
{
Title = "Ghostbusters 2",
ReleaseDate = DateTime.Parse("1986-2-23"),
Genre = "Comedy",
Price = 9.99M
},
new Movie
{
Title = "Rio Bravo",
ReleaseDate = DateTime.Parse("1959-4-15"),
Genre = "Western",
Price = 3.99M
}
);
context.SaveChanges();
}
}
}
}
Veritabanında herhangi bir film varsa, tohum başlatıcısı döner ve film eklenmez.
if (context.Movie.Any())
{
return;
}
Tohum başlatıcıyı ekleme
öğesini Program.cs
aşağıdaki vurgulanmış kodla güncelleştirin:
using Microsoft.EntityFrameworkCore;
using RazorPagesMovie.Data;
using RazorPagesMovie.Models;
var builder = WebApplication.CreateBuilder(args);
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();
using (var scope = app.Services.CreateScope())
{
var services = scope.ServiceProvider;
SeedData.Initialize(services);
}
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
Önceki kodda, Program.cs
aşağıdakileri yapacak şekilde değiştirildi:
- Bağımlılık ekleme (DI) kapsayıcısından bir veritabanı bağlam örneği alın.
seedData.Initialize
yöntemini çağırarak veritabanı bağlam örneğini geçirin.- Seed yöntemi tamamlandığında bağlamı atın. using deyimi, bağlamın atılmasını sağlar.
Aşağıdaki özel durum çalıştırılmadığında Update-Database
oluşur:
SqlException: Cannot open database "RazorPagesMovieContext-" requested by the login. The login failed.
Login failed for user 'user name'.
Uygulamayı test etme
Tohum yönteminin çalışması için veritabanındaki tüm kayıtları silin. Veritabanının tohumlarını oluşturmak için uygulamayı durdurun ve başlatın. Veritabanı dağıtılmıyorsa, bir kesme noktası if (context.Movie.Any())
koyun ve kodda adım adım ilerleyin.
Uygulama, dağıtılmış verileri gösterir:
Sonraki adımlar
Örnek kodu görüntüleme veya indirme (indirme).
RazorPagesMovieContext
nesnesi, veritabanına bağlanma ve nesneleri veritabanı kayıtlarına eşleme Movie
görevini işler. Veritabanı bağlamı içindeki yöntemindeki Startup.cs
Bağımlılık Ekleme kapsayıcısıyla ConfigureServices
kaydedilir:
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("RazorPagesMovieContext")));
}
ASP.NET Çekirdek Yapılandırma sistemi anahtarı okur ConnectionString
. Yerel geliştirme için yapılandırma dosyasından bağlantı dizesi appsettings.json
alır.
Oluşturulan bağlantı dizesi aşağıdaki JSON'a benzer:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"RazorPagesMovieContext": "Server=(localdb)\\mssqllocaldb;Database=RazorPagesMovieContext-bc;Trusted_Connection=True;MultipleActiveResultSets=true"
}
}
Uyarı
Bu makalede, kullanıcının kimliğinin doğrulanması gerekmeyen bir yerel veritabanı kullanılır. Üretim uygulamaları kullanılabilir en güvenli kimlik doğrulama akışını kullanmalıdır. Dağıtılan test ve üretim uygulamaları için kimlik doğrulaması hakkında daha fazla bilgi için bkz . Güvenli kimlik doğrulama akışları.
SQL Server Express LocalDB
LocalDB, SQL Server Express veritabanı altyapısının program geliştirme için hedeflenen basit bir sürümüdür. LocalDB isteğe bağlı olarak başlar ve kullanıcı modunda çalışır, bu nedenle karmaşık bir yapılandırma yoktur. Varsayılan olarak, LocalDB veritabanı dizinde C:\Users\<user>\
dosyalar oluşturur*.mdf
.
Görünüm menüsünden SQL Server Nesne Gezgini (SSOX) öğesini açın.
Tabloya sağ tıklayın ve Görünüm Tasarımcısı'nı
Movie
seçin:öğesinin yanındaki tuş simgesine
ID
dikkat edin. Varsayılan olarak EF, birincil anahtar için adlıID
bir özellik oluşturur.Tabloya
Movie
sağ tıklayın ve Verileri Görüntüle'yi seçin:
Veritabanının tohumunu oluşturma
Models klasöründe aşağıdaki kodla adlı SeedData
yeni bir sınıf oluşturun:
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using RazorPagesMovie.Data;
using System;
using System.Linq;
namespace RazorPagesMovie.Models
{
public static class SeedData
{
public static void Initialize(IServiceProvider serviceProvider)
{
using (var context = new RazorPagesMovieContext(
serviceProvider.GetRequiredService<
DbContextOptions<RazorPagesMovieContext>>()))
{
// Look for any movies.
if (context.Movie.Any())
{
return; // DB has been seeded
}
context.Movie.AddRange(
new Movie
{
Title = "When Harry Met Sally",
ReleaseDate = DateTime.Parse("1989-2-12"),
Genre = "Romantic Comedy",
Price = 7.99M
},
new Movie
{
Title = "Ghostbusters ",
ReleaseDate = DateTime.Parse("1984-3-13"),
Genre = "Comedy",
Price = 8.99M
},
new Movie
{
Title = "Ghostbusters 2",
ReleaseDate = DateTime.Parse("1986-2-23"),
Genre = "Comedy",
Price = 9.99M
},
new Movie
{
Title = "Rio Bravo",
ReleaseDate = DateTime.Parse("1959-4-15"),
Genre = "Western",
Price = 3.99M
}
);
context.SaveChanges();
}
}
}
}
Veritabanında herhangi bir film varsa, tohum başlatıcısı döner ve film eklenmez.
if (context.Movie.Any())
{
return;
}
Tohum başlatıcıyı ekleme
öğesinin Program.cs
içeriğini aşağıdaki kodla değiştirin:
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using RazorPagesMovie.Models;
using System;
namespace RazorPagesMovie
{
public class Program
{
public static void Main(string[] args)
{
var host = CreateHostBuilder(args).Build();
using (var scope = host.Services.CreateScope())
{
var services = scope.ServiceProvider;
try
{
SeedData.Initialize(services);
}
catch (Exception ex)
{
var logger = services.GetRequiredService<ILogger<Program>>();
logger.LogError(ex, "An error occurred seeding the DB.");
}
}
host.Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
}
Önceki kodda Main
yöntemi, aşağıdakileri yapacak şekilde değiştirilmiştir:
- Bağımlılık ekleme kapsayıcısından bir veritabanı bağlam örneği alın.
seedData.Initialize
yöntemini çağırarak veritabanı bağlam örneğini geçirin.- Seed yöntemi tamamlandığında bağlamı atın. using deyimi, bağlamın atılmasını sağlar.
Aşağıdaki özel durum çalıştırılmadığında Update-Database
oluşur:
SqlException: Cannot open database "RazorPagesMovieContext-" requested by the login. The login failed.
Login failed for user 'user name'.
Uygulamayı test etme
Veritabanındaki tüm kayıtları silin. Tarayıcıda veya SSOX'tan silme bağlantılarını kullanın
Sınıftaki yöntemleri
Startup
çağırarak uygulamayı başlatmaya zorlar, böylece seed yöntemi çalışır. Başlatmayı zorlamak için IIS Express durdurulmalı ve yeniden başlatılmalıdır. Aşağıdaki yaklaşımlardan herhangi biriyle IIS'yi durdurun ve yeniden başlatın:Bildirim alanında IIS Express sistem tepsisi simgesine sağ tıklayın ve Siteden Çık veya Siteyi Durdur'u seçin:
Uygulama hata ayıklama modunda çalışmıyorsa, hata ayıklama modunda çalıştırmak için F5 tuşuna basın.
Uygulama hata ayıklama modundaysa, hata ayıklayıcıyı durdurun ve F5 tuşuna basın.
Uygulama, dağıtılmış verileri gösterir:
Sonraki adımlar
Örnek kodu görüntüleme veya indirme (indirme).
RazorPagesMovieContext
nesnesi, veritabanına bağlanma ve nesneleri veritabanı kayıtlarına eşleme Movie
görevini işler. Veritabanı bağlamı içindeki yöntemindeki Startup.cs
Bağımlılık Ekleme kapsayıcısıyla ConfigureServices
kaydedilir:
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("RazorPagesMovieContext")));
}
ASP.NET Çekirdek Yapılandırma sistemi anahtarı okur ConnectionString
. Yerel geliştirme için yapılandırma dosyasından bağlantı dizesi appsettings.json
alır.
Oluşturulan bağlantı dizesi aşağıdakine benzer olacaktır:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"RazorPagesMovieContext": "Server=(localdb)\\mssqllocaldb;Database=RazorPagesMovieContext-bc;Trusted_Connection=True;MultipleActiveResultSets=true"
}
}
Uyarı
Bu makalede, kullanıcının kimliğinin doğrulanması gerekmeyen bir yerel veritabanı kullanılır. Üretim uygulamaları kullanılabilir en güvenli kimlik doğrulama akışını kullanmalıdır. Dağıtılan test ve üretim uygulamaları için kimlik doğrulaması hakkında daha fazla bilgi için bkz . Güvenli kimlik doğrulama akışları.
SQL Server Express LocalDB
LocalDB, SQL Server Express veritabanı altyapısının program geliştirme için hedeflenen basit bir sürümüdür. LocalDB isteğe bağlı olarak başlar ve kullanıcı modunda çalışır, bu nedenle karmaşık bir yapılandırma yoktur. Varsayılan olarak, LocalDB veritabanı dizinde C:\Users\<user>\
dosyalar oluşturur*.mdf
.
Görünüm menüsünden SQL Server Nesne Gezgini (SSOX) öğesini açın.
Tabloya sağ tıklayın ve Görünüm Tasarımcısı'nı
Movie
seçin:
öğesinin yanındaki tuş simgesine ID
dikkat edin. Varsayılan olarak EF, birincil anahtar için adlı ID
bir özellik oluşturur.
Tabloya
Movie
sağ tıklayın ve Verileri Görüntüle'yi seçin:
Veritabanının tohumunu oluşturma
Models klasöründe aşağıdaki kodla adlı SeedData
yeni bir sınıf oluşturun:
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using RazorPagesMovie.Data;
using System;
using System.Linq;
namespace RazorPagesMovie.Models
{
public static class SeedData
{
public static void Initialize(IServiceProvider serviceProvider)
{
using (var context = new RazorPagesMovieContext(
serviceProvider.GetRequiredService<
DbContextOptions<RazorPagesMovieContext>>()))
{
// Look for any movies.
if (context.Movie.Any())
{
return; // DB has been seeded
}
context.Movie.AddRange(
new Movie
{
Title = "When Harry Met Sally",
ReleaseDate = DateTime.Parse("1989-2-12"),
Genre = "Romantic Comedy",
Price = 7.99M
},
new Movie
{
Title = "Ghostbusters ",
ReleaseDate = DateTime.Parse("1984-3-13"),
Genre = "Comedy",
Price = 8.99M
},
new Movie
{
Title = "Ghostbusters 2",
ReleaseDate = DateTime.Parse("1986-2-23"),
Genre = "Comedy",
Price = 9.99M
},
new Movie
{
Title = "Rio Bravo",
ReleaseDate = DateTime.Parse("1959-4-15"),
Genre = "Western",
Price = 3.99M
}
);
context.SaveChanges();
}
}
}
}
Veritabanında herhangi bir film varsa, tohum başlatıcısı döner ve film eklenmez.
if (context.Movie.Any())
{
return;
}
Tohum başlatıcıyı ekleme
öğesinin Program.cs
içeriğini aşağıdaki kodla değiştirin:
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using RazorPagesMovie.Models;
using System;
namespace RazorPagesMovie
{
public class Program
{
public static void Main(string[] args)
{
var host = CreateHostBuilder(args).Build();
using (var scope = host.Services.CreateScope())
{
var services = scope.ServiceProvider;
try
{
SeedData.Initialize(services);
}
catch (Exception ex)
{
var logger = services.GetRequiredService<ILogger<Program>>();
logger.LogError(ex, "An error occurred seeding the DB.");
}
}
host.Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
}
Önceki kodda Main
yöntemi, aşağıdakileri yapacak şekilde değiştirilmiştir:
- Bağımlılık ekleme kapsayıcısından bir veritabanı bağlam örneği alın.
seedData.Initialize
yöntemini çağırarak veritabanı bağlam örneğini geçirin.- Seed yöntemi tamamlandığında bağlamı atın. using deyimi, bağlamın atılmasını sağlar.
Aşağıdaki özel durum çalıştırılmadığında Update-Database
oluşur:
SqlException: Cannot open database "RazorPagesMovieContext-" requested by the login. The login failed.
Login failed for user 'user name'.
Uygulamayı test etme
Veritabanındaki tüm kayıtları silin. Tarayıcıda veya SSOX'tan silme bağlantılarını kullanın.
Sınıftaki yöntemleri
Startup
çağırarak uygulamayı başlatmaya zorlar, böylece seed yöntemi çalışır. Başlatmayı zorlamak için IIS Express durdurulmalı ve yeniden başlatılmalıdır. Aşağıdaki yaklaşımlardan herhangi biriyle IIS'yi durdurun ve yeniden başlatın:Bildirim alanında IIS Express sistem tepsisi simgesine sağ tıklayın ve Siteden Çık veya Siteyi Durdur'a dokunun:
- Uygulama hata ayıklama modunda çalışmıyorsa, hata ayıklama modunda çalıştırmak için F5 tuşuna basın.
- Uygulama hata ayıklama modundaysa, hata ayıklayıcıyı durdurun ve F5 tuşuna basın.
Uygulama, dağıtılmış verileri gösterir:
Sonraki adımlar
ASP.NET Core