Bölüm 5, ASP.NET Core MVC uygulamasındaki bir veritabanıyla çalışma
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.
Rick Anderson ve Jon P Smith tarafından.
MvcMovieContext
nesnesi, veritabanına bağlanma ve nesneleri veritabanı kayıtlarına eşleme Movie
görevini işler. Veritabanı bağlamı, dosyasındaki Bağımlılık Ekleme kapsayıcısıyla Program.cs
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 Çekirdek Yapılandırma sistemi anahtarı okur ConnectionString
. Yerel geliştirme için dosyadan appsettings.json
bağlantı dizesi 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
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 hedeflenmiştir. 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ı
öğesinin yanındaki tuş simgesine ID
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ı SeedData
yeni 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();
}
}
}
Veritabanında herhangi bir film varsa, tohum başlatıcısı döner ve film eklenmez.
if (context.Movie.Any())
{
return; // DB has been seeded.
}
Tohum başlatıcıyı ekleme
öğ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, dosyadaki kodu çağırın Program.cs
, böylece seed yöntemi çalışır. 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.
MvcMovieContext
nesnesi, veritabanına bağlanma ve nesneleri veritabanı kayıtlarına eşleme Movie
görevini işler. Veritabanı bağlamı, dosyasındaki Bağımlılık Ekleme kapsayıcısıyla Program.cs
kaydedilir:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MvcMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext")));
ASP.NET Çekirdek Yapılandırma sistemi anahtarı okur ConnectionString
. Yerel geliştirme için dosyadan appsettings.json
bağlantı dizesi 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
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 hedeflenmiştir. 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ı
öğesinin yanındaki tuş simgesine ID
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ı SeedData
yeni 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();
}
}
}
Veritabanında herhangi bir film varsa, tohum başlatıcısı döner ve film eklenmez.
if (context.Movie.Any())
{
return; // DB has been seeded.
}
Tohum başlatıcıyı ekleme
öğ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, dosyadaki kodu çağırın Program.cs
, böylece seed yöntemi çalışır. 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.
MvcMovieContext
nesnesi, veritabanına bağlanma ve nesneleri veritabanı kayıtlarına eşleme Movie
görevini işler. Veritabanı bağlamı, dosyasındaki Bağımlılık Ekleme kapsayıcısıyla Program.cs
kaydedilir:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MvcMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext")));
ASP.NET Çekirdek Yapılandırma sistemi anahtarı okur ConnectionString
. Yerel geliştirme için dosyadan appsettings.json
bağlantı dizesi 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
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 hedeflenmiştir. 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ı
öğesinin yanındaki tuş simgesine ID
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ı SeedData
yeni 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();
}
}
}
Veritabanında herhangi bir film varsa, tohum başlatıcısı döner ve film eklenmez.
if (context.Movie.Any())
{
return; // DB has been seeded.
}
<a name=snippet_"si">
Tohum başlatıcıyı ekleme
öğ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, dosyadaki kodu çağırın Program.cs
, böylece seed yöntemi çalışır. 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.
MvcMovieContext
nesnesi, veritabanına bağlanma ve nesneleri veritabanı kayıtlarına eşleme Movie
görevini işler. Veritabanı bağlamı, dosyasındaki Bağımlılık Ekleme kapsayıcısıyla Program.cs
kaydedilir:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MvcMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext")));
ASP.NET Çekirdek Yapılandırma sistemi anahtarı okur ConnectionString
. Yerel geliştirme için dosyadan appsettings.json
bağlantı dizesi 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
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 hedeflenmiştir. 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ı SeedData
yeni 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();
}
}
}
}
Veritabanında herhangi bir film varsa, tohum başlatıcısı döner ve film eklenmez.
if (context.Movie.Any())
{
return; // DB has been seeded.
}
Tohum başlatıcıyı ekleme
öğ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, dosyadaki kodu çağırın Program.cs
, böylece seed yöntemi çalışır. 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.
MvcMovieContext
nesnesi, veritabanına bağlanma ve nesneleri veritabanı kayıtlarına eşleme Movie
görevini işler. Veritabanı bağlamı dosyasındaki yönteminde Bağımlılık Ekleme kapsayıcısıyla ConfigureServices
Startup.cs
kaydedilir:
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
services.AddDbContext<MvcMovieContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("MvcMovieContext")));
}
ASP.NET Çekirdek Yapılandırma sistemi anahtarı okur ConnectionString
. Yerel geliştirme için dosyadan appsettings.json
bağlantı dizesi 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
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 hedeflenmiştir. 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
öğesinin yanındaki tuş simgesine ID
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ı SeedData
yeni 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();
}
}
}
}
Veritabanında herhangi bir film varsa, tohum başlatıcısı döner ve film eklenmez.
if (context.Movie.Any())
{
return; // DB has been seeded.
}
Tohum başlatıcıyı ekleme
öğ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