如何使用数据库
创建DataContext.cs
using Microsoft.EntityFrameworkCore;
using PokemonReviewApp.Models;
namespace PokemonReviewApp.Data
{
public class DataContext : DbContext
{
public DataContext(DbContextOptions<DataContext> options) : base(options)
{
}
public DbSet<Category> Categories { get; set; }
public DbSet<Country> Countries { get; set; }
public DbSet<Owner> Owners { get; set; }
public DbSet<Pokemon> Pokemon { get; set; }
public DbSet<PokemonOwner> PokemonOwners { get; set; }
public DbSet<PokemonCategory> PokemonCategories { get; set; }
public DbSet<Review> Reviews { get; set; }
public DbSet<Reviewer> Reviewers { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<PokemonCategory>()
.HasKey(pc => new { pc.PokemonId, pc.CategoryId });
// ..........................
}
}
}
Program.cs注册服务
using Microsoft.EntityFrameworkCore;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<DataContext>(options =>
{
options.UseSqlite(builder.Configuration.GetConnectionString("DefaultConnection"));
});
Seed数据库
编写seed.cs
using PokemonReviewApp.Data;
using PokemonReviewApp.Models;
namespace PokemonReviewApp
{
public class Seed
{
private readonly DataContext dataContext;
public Seed(DataContext context)
{
this.dataContext = context;
}
public void SeedDataContext()
{
if (!dataContext.PokemonOwners.Any())
{
var pokemonOwners = new List<PokemonOwner>()
{
new PokemonOwner()
{
Pokemon = new Pokemon()
{
Name = "Pikachu",
BirthDate = new DateTime(1903,1,1),
PokemonCategories = new List<PokemonCategory>()
{
new PokemonCategory { Category = new Category() { Name = "Electric"}}
},
Reviews = new List<Review>()
{
new Review { Title="Pikachu",Text = "Pickahu is the best pokemon, because it is electric", Rating = 5,
Reviewer = new Reviewer(){ FirstName = "Teddy", LastName = "Smith" } },
new Review { Title="Pikachu", Text = "Pickachu is the best a killing rocks", Rating = 5,
Reviewer = new Reviewer(){ FirstName = "Taylor", LastName = "Jones" } },
new Review { Title="Pikachu",Text = "Pickchu, pickachu, pikachu", Rating = 1,
Reviewer = new Reviewer(){ FirstName = "Jessica", LastName = "McGregor" } },
}
},
Owner = new Owner()
{
FirstName = "Jack",
LastName = "London",
Gym = "Brocks Gym",
Country = new Country()
{
Name = "Kanto"
}
}
},
new PokemonOwner()
{
Pokemon = new Pokemon()
{
Name = "Squirtle",
BirthDate = new DateTime(1903,1,1),
PokemonCategories = new List<PokemonCategory>()
{
new PokemonCategory { Category = new Category() { Name = "Water"}}
},
Reviews = new List<Review>()
{
new Review { Title= "Squirtle", Text = "squirtle is the best pokemon, because it is electric", Rating = 5,
Reviewer = new Reviewer(){ FirstName = "Teddy", LastName = "Smith" } },
new Review { Title= "Squirtle",Text = "Squirtle is the best a killing rocks", Rating = 5,
Reviewer = new Reviewer(){ FirstName = "Taylor", LastName = "Jones" } },
new Review { Title= "Squirtle", Text = "squirtle, squirtle, squirtle", Rating = 1,
Reviewer = new Reviewer(){ FirstName = "Jessica", LastName = "McGregor" } },
}
},
Owner = new Owner()
{
FirstName = "Harry",
LastName = "Potter",
Gym = "Mistys Gym",
Country = new Country()
{
Name = "Saffron City"
}
}
},
new PokemonOwner()
{
Pokemon = new Pokemon()
{
Name = "Venasuar",
BirthDate = new DateTime(1903,1,1),
PokemonCategories = new List<PokemonCategory>()
{
new PokemonCategory { Category = new Category() { Name = "Leaf"}}
},
Reviews = new List<Review>()
{
new Review { Title="Veasaur",Text = "Venasuar is the best pokemon, because it is electric", Rating = 5,
Reviewer = new Reviewer(){ FirstName = "Teddy", LastName = "Smith" } },
new Review { Title="Veasaur",Text = "Venasuar is the best a killing rocks", Rating = 5,
Reviewer = new Reviewer(){ FirstName = "Taylor", LastName = "Jones" } },
new Review { Title="Veasaur",Text = "Venasuar, Venasuar, Venasuar", Rating = 1,
Reviewer = new Reviewer(){ FirstName = "Jessica", LastName = "McGregor" } },
}
},
Owner = new Owner()
{
FirstName = "Ash",
LastName = "Ketchum",
Gym = "Ashs Gym",
Country = new Country()
{
Name = "Millet Town"
}
}
}
};
dataContext.PokemonOwners.AddRange(pokemonOwners);
dataContext.SaveChanges();
}
}
}
}
注册seed服务
using Microsoft.EntityFrameworkCore;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddTransient<Seed>();
var app = builder.Build();
if (args.Length == 1 && args[0].ToLower() == "seeddata")
SeedData(app);
void SeedData(IHost app)
{
var scopedFactory = app.Services.GetService<IServiceScopeFactory>();
using (var scope = scopedFactory.CreateScope())
{
// Summary:
// Get service of type T from the System.IServiceProvider.
// Parameters:
// provider:
// The System.IServiceProvider to retrieve the service object from.
// Type parameters:
// T:
// The type of service object to get.
// Returns:
// A service object of type T or null if there is no such service.
var service = scope.ServiceProvider.GetService<Seed>();
service.SeedDataContext();
}
}
app.Run();