https://docs.asp.net/en/latest/tutorials/first-mvc-app/working-with-sql.html
The ApplicationDbContext
class handles the task of connecting to the database and mapping Movie
objects to database records.
The database context is registered with the Dependency Injectioncontainer in the ConfigureServices
method in the Startup.cs file:
public void ConfigureServices(IServiceCollection services) { // Add framework services. services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
The ASP.NET Core Configuration system reads the ConnectionString
.
For local development, it gets the connection string from the appsettings.json file:
{ "ConnectionStrings": { "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=aspnet-MvcMovie-056c4c63-225a-436a-b9a8-a24628152dee;Trusted_Connection=True;MultipleActiveResultSets=true" }, "Logging": { "IncludeScopes": false,
When you deploy the app to a test or production server, you can use an environment variable or another approach to set the connection string to a real SQL Server. See Configuration .
注意看之前的数据库连接,根据连接去找到对应的数据库
Server=(localdb)\\mssqllocaldb;Database=aspnet-MvcMovie-056c4c63-225a-436a-b9a8-a24628152dee;
LocalDB is a lightweight version of the SQL Server Express Database Engine that is targeted for program development. LocalDB starts on demand and runs in user mode, so there is no complex configuration. By default, LocalDB database creates “*.mdf” files in the C:/Users/<user> directory.
Movie
table > View DesignerNote the key icon next to ID
. By default, EF will make a property named ID
the primary key.
Movie
table > View Data
Create a new class named SeedData
in the Models folder. Replace the generated code with the following:
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 ApplicationDbContext( serviceProvider.GetRequiredService<DbContextOptions<ApplicationDbContext>>())) { // 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-1-11"), 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(); } } } }
Notice if there are any movies in the DB, the seed initializer returns.
// Look for any movies. if (context.Movie.Any()) { return; // DB has been seeded }
Add the seed initializer to the end of the Configure
method in the Startup.cs file:
app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); }); SeedData.Initialize(app.ApplicationServices);
Test the app
Startup
class) so the seed method runs. To force initialization, IIS Express must be stopped and restarted. You can do this with any of the following approaches:
If the database doesn’t initialize, put a break point on the line if (context.Movie.Any())
and start debugging.
The app shows the seeded data.