So I am learning MVC3 and EF4. I tried the code first method but it was too confusing for me.. I can create the classes no problem, but the hard part comes when dealing with foreign keys and the relationships between each other.
But I've gone with model first. This way I can visually design it and see where the relationships are.
After my model is create, it creates a SQL for me which I execute against my SQL Express database. Done, and done.
Now I want data in my tables. Of course I can just add them in using server explorer, but most likely I will be making changes to my model as I go along. And keep updating the database. So I can't keep manually entering data. I know if you use code first you can derive the DropCreateDatabaseIfModelChanges
and override the seed
method.
However how do I do this with model first approach? I have the following code:
public class DatabaseInitializer : IDatabaseInitializer<BettingContext> {
public void InitializeDatabase(BettingContext context) {
var teams = new List<Team> {
new Team { Name="Toronto Maple Leafs", League="NHL"},
new Team { Name="Boston Bruins", League="NHL"},
new Team { Name="Vancouver Canucks", League="NHL"},
new Team { Name="Nashville Predators", League="NHL"},
new Team { Name="Montreal Canadiens", League="NHL"},
};
}
}
Of course and in my global file:
protected void Application_Start()
{
Database.SetInitializer<BettingContext>(new DatabaseInitializer());
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
}
so now what? How do I tell it to run the method? What am I doing wrong?
You can have something like this:
public class MySeedData : DropCreateDatabaseIfModelChanges<YourDataBaseContextClass>
{
protected override void Seed(YourDataBaseContextClass context)
{
// Create objects here and add them to your context DBSets...
}
}
public class YourDataBaseContextClass : DbContext
{
}
Then, within Application_Start()
you call:
Database.SetInitializer(new MySeedData());
In your case, you could try creating DbSets (using your model first classes) manually and try to plug it using the code above. It's kind of a mix of Model First + Code First.
public class FourthCoffeeWebContext : DbContext
{
public DbSet<Category> Categories { get; set; }
public DbSet<Product> Products { get; set; }
}
Adding to this: CreateDatabaseIfNotExists<(Of <(<'TContext>)>)>