Je n'arrive pas à comprendre pourquoi mes initialisateurs ne fonctionnent pas. J'utilise EF Code First pour créer une base de données et je veux aussi utiliser l'approche d'initialisation pour remplir la base de données avec des valeurs par défaut lors de la création de la base de données. Mais chaque fois que j'essaie, ma base de données crée mais les initialiseurs ne fonctionnent pas et il n'y a pas de données dans les tables qui sont celles que je veux initialiser avec des valeurs par défaut. Est-ce que je manque quelque chose? Si j'ai tort, alors quelle est la bonne façon d'utiliser les initialiseurs.
Remarque: Je ne souhaite pas utiliser Configuration.c pour créer une base de données, je souhaite utiliser mes initialiseurs personnalisés.
DataContext.cs
Initialisation de la base de données avec le code EF Premier
namespace WebApplication1.Data.Context
{
public class DataContext : DbContext
{
public DataContext() : base("name=MyDB")
{
Database.SetInitializer<DataContext>(new DropCreateDatabaseAlways<DataContext>());
}
public DbSet<Category> Categories { get; set; }
}
}
CategoryInitializer.cs
namespace WebApplication1.Data.Initializers
{
public class CategoryInitializer : DropCreateDatabaseIfModelChanges<DataContext>
{
protected override void Seed(DataContext context)
{
GetCategories().ForEach(c => context.Categories.Add(c));
context.SaveChanges();
base.Seed(context);
}
private static List<Category> GetCategories()
{
var categories = new List<Category>
{
new Category {CategoryID = 1, CategoryName = "Category 1" },
new Category {CategoryID = 2, CategoryName = "Category 2"},
new Category {CategoryID = 3, CategoryName = "Category 3"}
};
return categories;
}
}
}
Category.cs
namespace WebApplication1.Data.Model
{
public class Category
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int CategoryID { get; set; }
public string CategoryName { get; set; }
}
}
Vous définissez un initialiseur standard à la place du vôtre, il devrait être 'Database.SetInitializer (nouveau CategoryInitializer());' –
Je l'ai fait aussi, mais ne fonctionne pas. –
Il vous manque 'Database.Initialize (true);' après votre 'SetInitializer' état. ;-) – LocEngineer