Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Not
Bu, bu makalenin en son sürümü değildir. Geçerli sürüm için bu makalenin .NET 10 sürümüne bakın.
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 9 sürümüne bakın.
Rick Anderson ve Jon P Smith tarafından.
Giriş
Öğretici serisinin bu bölümü, ASP.NET Core MVC uygulamanızda bir SQL veritabanıyla çalışmaya odaklanır.
Şunları nasıl yapacağınızı öğreneceksiniz:
- ASP.NET Core MVC uygulamanız için Entity Framework Core veritabanı bağlamını kaydedin ve yapılandırın.
- Yerel geliştirme için veritabanı bağlantı dizeleriyle çalışma.
- Geliştirme için SQL Server Express LocalDB kullanın ve SQL Server Nesne Gezgini'ni kullanarak veritabanınızı ve verilerinizi inceleyin.
- Veritabanınızı ilk örnek verilerle tohumlar.
Önkoşul
Bu öğreticide önceki adımda ayarladığınız bir veritabanı kullanılır: Bölüm 4, ASP.NET Core MVC uygulamasına model ekleme.
Veritabanı bağlamıyla çalışma
MvcMovieContext nesnesi, veritabanına bağlanma ve nesneleri veritabanı kayıtlarına eşleme Movie görevini işler. Veritabanı bağlamı, Bağımlılık Enjeksiyonu kapsayıcısına Program.cs dosyasında kaydedilir.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MvcMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext") ?? throw new InvalidOperationException("Connection string 'MvcMovieContext' not found.")));
ASP.NET Core Yapılandırma sistemi ConnectionString anahtarını okur. Yerel geliştirme için appsettings.json dosyasından bağlantı dizesini alır.
"ConnectionStrings": {
"MvcMovieContext": "Server=(localdb)\\mssqllocaldb;Database=MvcMovieContext-4ebefa10-de29-4dea-b2ad-8a8dc6bcf374;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 (Yerel Veritabanı Motoru)
LocalDB:
- Varsayılan olarak Visual Studio ile yüklenen SQL Server Express Veritabanı Altyapısı'nın basit bir sürümüdür.
- bir bağlantı dizesi kullanarak isteğe bağlı olarak başlar.
- Program geliştirme için amaçlanmıştır. Kullanıcı modunda çalıştığından karmaşık bir yapılandırma yoktur.
- Varsayılan olarak C:/Users/{user} dizininde .mdf dosyaları oluşturur.
Veritabanını inceleme
Görünüm menüsünden SQL Server Nesne Gezgini (SSOX) öğesini açın.
Tabloya Movie sağ tıklayın (dbo.Movie) > Görünüm Tasarımcısı
ID öğesinin yanındaki anahtar simgesine dikkat edin. Varsayılan olarak, EF birincil anahtar adlı ID bir özellik yapar.
Verileri Görüntüle tablosuna Movie> sağ tıklayın
Veritabanının tohumunu oluşturma
Models klasöründe adlı SeedDatayeni bir sınıf oluşturun. Oluşturulan kodu aşağıdakilerle değiştirin:
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using System;
using System.Linq;
namespace MvcMovie.Models;
public static class SeedData
{
public static void Initialize(IServiceProvider serviceProvider)
{
using (var context = new MvcMovieContext(
serviceProvider.GetRequiredService<
DbContextOptions<MvcMovieContext>>()))
{
// 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();
}
}
}
Veri tabanında herhangi bir film varsa, başlangıç düzenleyicisi işlevini tamamlar ve hiçbir film eklenmeyecek.
if (context.Movie.Any())
{
return; // DB has been seeded.
}
Tohum başlatıcıyı ekle
öğesinin içeriğini Program.cs aşağıdaki kodla değiştirin. Yeni kod vurgulanır.
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using MvcMovie.Models;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MvcMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext") ?? throw new InvalidOperationException("Connection string 'MvcMovieContext' not found.")));
// Add services to the container.
builder.Services.AddControllersWithViews();
var app = builder.Build();
using (var scope = app.Services.CreateScope())
{
var services = scope.ServiceProvider;
SeedData.Initialize(services);
}
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Home/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.UseRouting();
app.UseAuthorization();
app.MapStaticAssets();
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.Run();
Veritabanındaki tüm kayıtları silin. Bunu tarayıcıdaki veya SSOX'taki silme bağlantılarıyla yapabilirsiniz.
Uygulamayı test etme. Uygulamayı başlatmaya zorlayın ve Program.cs dosyasındaki kodu çağırarak seed yönteminin çalışmasını sağlayın. Başlatmayı zorlamak için Visual Studio'da açılan komut istemi penceresini kapatın ve Ctrl+F5 tuşlarına basarak yeniden başlatın.
Uygulama, dağıtılmış verileri gösterir.
Giriş
Öğretici serisinin bu bölümü, ASP.NET Core MVC uygulamanızda bir SQL veritabanıyla çalışmaya odaklanır.
Şunları nasıl yapacağınızı öğreneceksiniz:
- ASP.NET Core MVC uygulamanız için Entity Framework Core veritabanı bağlamını kaydedin ve yapılandırın.
- Yerel geliştirme için veritabanı bağlantı dizeleriyle çalışma.
- Geliştirme için SQL Server Express LocalDB kullanın ve SQL Server Nesne Gezgini'ni kullanarak veritabanınızı ve verilerinizi inceleyin.
- Veritabanınızı ilk örnek verilerle tohumlar.
Önkoşul
Bu öğreticide önceki adımda ayarladığınız bir veritabanı kullanılır: Bölüm 4, ASP.NET Core MVC uygulamasına model ekleme.
Veritabanı bağlamıyla çalışma
MvcMovieContext nesnesi, veritabanına bağlanma ve nesneleri veritabanı kayıtlarına eşleme Movie görevini işler. Veritabanı bağlamı, Bağımlılık Enjeksiyonu kapsayıcısına Program.cs dosyasında kaydedilir.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MvcMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext")));
ASP.NET Core Yapılandırma sistemi ConnectionString anahtarını okur. Yerel geliştirme için appsettings.json dosyasından bağlantı dizesini alır.
"ConnectionStrings": {
"MvcMovieContext": "Data Source=MvcMovieContext-ea7a4069-f366-4742-bd1c-3f753a804ce1.db"
}
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 (Yerel Veritabanı Motoru)
LocalDB:
- Varsayılan olarak Visual Studio ile yüklenen SQL Server Express Veritabanı Altyapısı'nın basit bir sürümüdür.
- bir bağlantı dizesi kullanarak isteğe bağlı olarak başlar.
- Program geliştirme için amaçlanmıştır. Kullanıcı modunda çalıştığından karmaşık bir yapılandırma yoktur.
- Varsayılan olarak C:/Users/{user} dizininde .mdf dosyaları oluşturur.
Veritabanını inceleme
Görünüm menüsünden SQL Server Nesne Gezgini (SSOX) öğesini açın.
Tabloya Movie sağ tıklayın (dbo.Movie) > Görünüm Tasarımcısı
ID öğesinin yanındaki anahtar simgesine dikkat edin. Varsayılan olarak, EF birincil anahtar adlı ID bir özellik yapar.
Verileri Görüntüle tablosuna Movie> sağ tıklayın
Veritabanının tohumunu oluşturma
Models klasöründe adlı SeedDatayeni bir sınıf oluşturun. Oluşturulan kodu aşağıdakilerle değiştirin:
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using System;
using System.Linq;
namespace MvcMovie.Models;
public static class SeedData
{
public static void Initialize(IServiceProvider serviceProvider)
{
using (var context = new MvcMovieContext(
serviceProvider.GetRequiredService<
DbContextOptions<MvcMovieContext>>()))
{
// 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();
}
}
}
Veri tabanında herhangi bir film varsa, başlangıç düzenleyicisi işlevini tamamlar ve hiçbir film eklenmeyecek.
if (context.Movie.Any())
{
return; // DB has been seeded.
}
Tohum başlatıcıyı ekle
öğesinin içeriğini Program.cs aşağıdaki kodla değiştirin. Yeni kod vurgulanır.
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using MvcMovie.Models;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MvcMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext")));
// Add services to the container.
builder.Services.AddControllersWithViews();
var app = builder.Build();
using (var scope = app.Services.CreateScope())
{
var services = scope.ServiceProvider;
SeedData.Initialize(services);
}
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Home/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.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.Run();
Veritabanındaki tüm kayıtları silin. Bunu tarayıcıdaki veya SSOX'taki silme bağlantılarıyla yapabilirsiniz.
Uygulamayı test etme. Uygulamayı başlatmaya zorlayın ve Program.cs dosyasındaki kodu çağırarak seed yönteminin çalışmasını sağlayın. Başlatmayı zorlamak için Visual Studio'da açılan komut istemi penceresini kapatın ve Ctrl+F5 tuşlarına basarak yeniden başlatın.
Uygulama, dağıtılmış verileri gösterir.
Giriş
Öğretici serisinin bu bölümü, ASP.NET Core MVC uygulamanızda bir SQL veritabanıyla çalışmaya odaklanır.
Şunları nasıl yapacağınızı öğreneceksiniz:
- ASP.NET Core MVC uygulamanız için Entity Framework Core veritabanı bağlamını kaydedin ve yapılandırın.
- Yerel geliştirme için veritabanı bağlantı dizeleriyle çalışma.
- Geliştirme için SQL Server Express LocalDB kullanın ve SQL Server Nesne Gezgini'ni kullanarak veritabanınızı ve verilerinizi inceleyin.
- Veritabanınızı ilk örnek verilerle tohumlar.
Önkoşul
Bu öğreticide önceki adımda ayarladığınız bir veritabanı kullanılır: Bölüm 4, ASP.NET Core MVC uygulamasına model ekleme.
Veritabanı bağlamıyla çalışma
MvcMovieContext nesnesi, veritabanına bağlanma ve nesneleri veritabanı kayıtlarına eşleme Movie görevini işler. Veritabanı bağlamı, Bağımlılık Enjeksiyonu kapsayıcısına Program.cs dosyasında kaydedilir.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MvcMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext")));
ASP.NET Core Yapılandırma sistemi ConnectionString anahtarını okur. Yerel geliştirme için appsettings.json dosyasından bağlantı dizesini alır.
"ConnectionStrings": {
"MvcMovieContext": "Data Source=MvcMovieContext-ea7a4069-f366-4742-bd1c-3f753a804ce1.db"
}
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 (Yerel Veritabanı Motoru)
LocalDB:
- Varsayılan olarak Visual Studio ile yüklenen SQL Server Express Veritabanı Altyapısı'nın basit bir sürümüdür.
- bir bağlantı dizesi kullanarak isteğe bağlı olarak başlar.
- Program geliştirme için amaçlanmıştır. Kullanıcı modunda çalıştığından karmaşık bir yapılandırma yoktur.
- Varsayılan olarak C:/Users/{user} dizininde .mdf dosyaları oluşturur.
Veritabanını inceleme
Görünüm menüsünden SQL Server Nesne Gezgini (SSOX) öğesini açın.
Tabloya Movie sağ tıklayın (dbo.Movie) > Görünüm Tasarımcısı
ID öğesinin yanındaki anahtar simgesine dikkat edin. Varsayılan olarak, EF birincil anahtar adlı ID bir özellik yapar.
Verileri Görüntüle tablosuna Movie> sağ tıklayın
Veritabanının tohumunu oluşturma
Models klasöründe adlı SeedDatayeni bir sınıf oluşturun. Oluşturulan kodu aşağıdakilerle değiştirin:
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using System;
using System.Linq;
namespace MvcMovie.Models;
public static class SeedData
{
public static void Initialize(IServiceProvider serviceProvider)
{
using (var context = new MvcMovieContext(
serviceProvider.GetRequiredService<
DbContextOptions<MvcMovieContext>>()))
{
// 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();
}
}
}
Veri tabanında herhangi bir film varsa, başlangıç düzenleyicisi işlevini tamamlar ve hiçbir film eklenmeyecek.
if (context.Movie.Any())
{
return; // DB has been seeded.
}
<a name=snippet_"si">
Tohum başlatıcıyı ekle
öğesinin içeriğini Program.cs aşağıdaki kodla değiştirin. Yeni kod vurgulanır.
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using MvcMovie.Models;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MvcMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext")));
// Add services to the container.
builder.Services.AddControllersWithViews();
var app = builder.Build();
using (var scope = app.Services.CreateScope())
{
var services = scope.ServiceProvider;
SeedData.Initialize(services);
}
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Home/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.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.Run();
Veritabanındaki tüm kayıtları silin. Bunu tarayıcıdaki veya SSOX'taki silme bağlantılarıyla yapabilirsiniz.
Uygulamayı test etme. Uygulamayı başlatmaya zorlayın ve Program.cs dosyasındaki kodu çağırarak seed yönteminin çalışmasını sağlayın. Başlatmayı zorlamak için Visual Studio'da açılan komut istemi penceresini kapatın ve Ctrl+F5 tuşlarına basarak yeniden başlatın.
Uygulama, dağıtılmış verileri gösterir.
Giriş
Öğretici serisinin bu bölümü, ASP.NET Core MVC uygulamanızda bir SQL veritabanıyla çalışmaya odaklanır.
Şunları nasıl yapacağınızı öğreneceksiniz:
- ASP.NET Core MVC uygulamanız için Entity Framework Core veritabanı bağlamını kaydedin ve yapılandırın.
- Yerel geliştirme için veritabanı bağlantı dizeleriyle çalışma.
- Geliştirme için SQL Server Express LocalDB kullanın ve SQL Server Nesne Gezgini'ni kullanarak veritabanınızı ve verilerinizi inceleyin.
- Veritabanınızı ilk örnek verilerle tohumlar.
Önkoşul
Bu öğreticide önceki adımda ayarladığınız bir veritabanı kullanılır: Bölüm 4, ASP.NET Core MVC uygulamasına model ekleme.
Veritabanı bağlamıyla çalışma
MvcMovieContext nesnesi, veritabanına bağlanma ve nesneleri veritabanı kayıtlarına eşleme Movie görevini işler. Veritabanı bağlamı, Bağımlılık Enjeksiyonu kapsayıcısına Program.cs dosyasında kaydedilir.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MvcMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext")));
ASP.NET Core Yapılandırma sistemi ConnectionString anahtarını okur. Yerel geliştirme için appsettings.json dosyasından bağlantı dizesini alır.
"ConnectionStrings": {
"MvcMovieContext": "Server=(localdb)\\mssqllocaldb;Database=MvcMovieContext-7dc5;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 (Yerel Veritabanı Motoru)
LocalDB:
- Varsayılan olarak Visual Studio ile yüklenen SQL Server Express Veritabanı Altyapısı'nın basit bir sürümüdür.
- bir bağlantı dizesi kullanarak isteğe bağlı olarak başlar.
- Program geliştirme için amaçlanmıştır. Kullanıcı modunda çalıştığından karmaşık bir yapılandırma yoktur.
- Varsayılan olarak C:/Users/{user} dizininde .mdf dosyaları oluşturur.
Veritabanının tohumunu oluşturma
Models klasöründe adlı SeedDatayeni bir sınıf oluşturun. Oluşturulan kodu aşağıdakilerle değiştirin:
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using System;
using System.Linq;
namespace MvcMovie.Models
{
public static class SeedData
{
public static void Initialize(IServiceProvider serviceProvider)
{
using (var context = new MvcMovieContext(
serviceProvider.GetRequiredService<
DbContextOptions<MvcMovieContext>>()))
{
// 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();
}
}
}
}
Veri tabanında herhangi bir film varsa, başlangıç düzenleyicisi işlevini tamamlar ve hiçbir film eklenmeyecek.
if (context.Movie.Any())
{
return; // DB has been seeded.
}
Tohum başlatıcıyı ekle
öğesinin içeriğini Program.cs aşağıdaki kodla değiştirin. Yeni kod vurgulanır.
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using MvcMovie.Models;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MvcMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext")));
// Add services to the container.
builder.Services.AddControllersWithViews();
var app = builder.Build();
using (var scope = app.Services.CreateScope())
{
var services = scope.ServiceProvider;
SeedData.Initialize(services);
}
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Home/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.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.Run();
Veritabanındaki tüm kayıtları silin. Bunu tarayıcıdaki veya SSOX'taki silme bağlantılarıyla yapabilirsiniz.
Uygulamayı test etme. Uygulamayı başlatmaya zorlayın ve Program.cs dosyasındaki kodu çağırarak seed yönteminin çalışmasını sağlayın. Başlatmayı zorlamak için Visual Studio'da açılan komut istemi penceresini kapatın ve Ctrl+F5 tuşlarına basarak yeniden başlatın.
Uygulama, dağıtılmış verileri gösterir.
Giriş
Öğretici serisinin bu bölümü, ASP.NET Core MVC uygulamanızda bir SQL veritabanıyla çalışmaya odaklanır.
Şunları nasıl yapacağınızı öğreneceksiniz:
- ASP.NET Core MVC uygulamanız için Entity Framework Core veritabanı bağlamını kaydedin ve yapılandırın.
- Yerel geliştirme için veritabanı bağlantı dizeleriyle çalışma.
- Geliştirme için SQL Server Express LocalDB kullanın ve SQL Server Nesne Gezgini'ni kullanarak veritabanınızı ve verilerinizi inceleyin.
- Veritabanınızı ilk örnek verilerle tohumlar.
Önkoşul
Bu öğreticide önceki adımda ayarladığınız bir veritabanı kullanılır: Bölüm 4, ASP.NET Core MVC uygulamasına model ekleme.
Veritabanı bağlamıyla çalışma
MvcMovieContext nesnesi, veritabanına bağlanma ve nesneleri veritabanı kayıtlarına eşleme Movie görevini işler. Veritabanı bağlamı, Bağımlılık Ekleme kapsayıcısı ile ConfigureServices yönteminde, Startup.cs dosyasında kaydedilir.
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
services.AddDbContext<MvcMovieContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("MvcMovieContext")));
}
ASP.NET Core Yapılandırma sistemi ConnectionString anahtarını okur. Yerel geliştirme için appsettings.json dosyasından bağlantı dizesini alır.
"ConnectionStrings": {
"MvcMovieContext": "Server=(localdb)\\mssqllocaldb;Database=MvcMovieContext-2;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 (Yerel Veritabanı Motoru)
LocalDB:
- Varsayılan olarak Visual Studio ile yüklenen SQL Server Express Veritabanı Altyapısı'nın basit bir sürümüdür.
- bir bağlantı dizesi kullanarak isteğe bağlı olarak başlar.
- Program geliştirme için amaçlanmıştır. Kullanıcı modunda çalıştığından karmaşık bir yapılandırma yoktur.
- Varsayılan olarak C:/Users/{user} dizininde .mdf dosyaları oluşturur.
Veritabanını inceleme
Görünüm menüsünden SQL Server Nesne Gezgini (SSOX) öğesini açın.
Görünüm Tasarımcısı tablosuna Movie> sağ tıklayın
ID öğesinin yanındaki anahtar simgesine dikkat edin. Varsayılan olarak, EF birincil anahtar adlı ID bir özellik yapar.
Verileri Görüntüle tablosuna Movie> sağ tıklayın
Veritabanının tohumunu oluşturma
Models klasöründe adlı SeedDatayeni bir sınıf oluşturun. Oluşturulan kodu aşağıdakilerle değiştirin:
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using System;
using System.Linq;
namespace MvcMovie.Models
{
public static class SeedData
{
public static void Initialize(IServiceProvider serviceProvider)
{
using (var context = new MvcMovieContext(
serviceProvider.GetRequiredService<
DbContextOptions<MvcMovieContext>>()))
{
// 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();
}
}
}
}
Veri tabanında herhangi bir film varsa, başlangıç düzenleyicisi işlevini tamamlar ve hiçbir film eklenmeyecek.
if (context.Movie.Any())
{
return; // DB has been seeded.
}
Tohum başlatıcıyı ekle
öğesinin içeriğini Program.cs aşağıdaki kodla değiştirin:
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using MvcMovie.Data;
using MvcMovie.Models;
using System;
namespace MvcMovie
{
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>();
});
}
}
Uygulamayı test etme.
Veritabanındaki tüm kayıtları silin. Bunu tarayıcıdaki veya SSOX'taki silme bağlantılarıyla yapabilirsiniz.
Uygulamayı başlatmaya zorlar, sınıftaki Startup yöntemleri çağırır, böylece seed yöntemi çalışır. Başlatmayı zorlamak için IIS Express durdurulmalı ve yeniden başlatılmalıdır. Bunu aşağıdaki yaklaşımlardan herhangi biriyle yapabilirsiniz:
Bildirim alanında IIS Express sistem tepsisi simgesine sağ tıklayın ve Siteden Çık veya Siteyi Durdur'a dokunun:
- VS'yi hata ayıklama dışı modda çalıştırıyorsanız, hata ayıklama modunda çalıştırmak için F5 tuşuna basın
- VS'yi hata ayıklama modunda çalıştırıyorsanız hata ayıklayıcıyı durdurun ve F5 tuşuna basın
Uygulama, dağıtılmış verileri gösterir.
ASP.NET Core