I've been following this tutorial http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/creating-an-entity-framework-data-model-for-an-asp-net-mvc-application but customising it for a project I'm working on.
I'm having problems when I run it though - it fails to initialize the DB and gives me this error when I access a controller which needs to use the DB:
Failed to set database initializer of type 'JustSpecIt.DAL.JustSpecItInitializer, JustSpecIt' for DbContext type 'JustSpecIt.DAL.JustSpecItAppContext, JustSpecIt' specified in the application
My initializer and context files are in a DAL folder. In my webconfig file I have:
<entityFramework>
<contexts>
<context type="JustSpecIt.DAL.JustSpecItAppContext, JustSpecIt">
<databaseInitializer type="JustSpecIt.DAL.JustSpecItInitializer, JustSpecIt" />
</context>
And for my connection string I have:
<connectionStrings>
<add name="JustSpecItAppContext" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=JustSpecIt;Integrated Security=SSPI;" providerName="System.Data.SqlClient"/>
</connectionStrings>
I'm new to this so let me know if more info is required.
As requested, here is my initializer class:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;
using JustSpecIt.Models;
namespace JustSpecIt.DAL
{
public class JustSpecItInitialiser : System.Data.Entity.DropCreateDatabaseIfModelChanges<JustSpecItAppContext>
{
protected override void Seed(JustSpecItAppContext context)
{
var Projects = new List<Project>
{
new Project {ProjectName="Just Spec It", ClientID = "GR Corp", Description="Build Just Spec It Application"}
};
Projects.ForEach(s => context.Projects.Add(s));
context.SaveChanges();
var UseCases = new List<UseCase>
{
new UseCase {ProjectID = 1, ActorID = 1, Title = "Print Specification"}
};
UseCases.ForEach(s => context.UseCases.Add(s));
context.SaveChanges();
var Steps = new List<Step>
{
new Step {UseCaseID = 1, Content = "This is step 1"},
new Step {UseCaseID = 1, Content = "This is step 2"},
new Step {UseCaseID = 1, Content = "This is step 3"},
};
Steps.ForEach(s => context.Steps.Add(s));
context.SaveChanges();
var Queries = new List<Query>
{
new Query {UseCaseID = 1, QueryDescription = "We need to add more details to this Use Case!"}
};
Queries.ForEach(s=> context.Queries.Add(s));
context.SaveChanges();
var Actors = new List<Actor>
{
new Actor {Title = "Business Analyst", Description = "This group will interact with the application to generate the use cases. They will follow Cockburn's writing process to produce the use cases in an effective way!"},
new Actor {Title = "End System User", Description = "These users will use the application for two primary purposes. The first is to submit uses case titles (which in fact will be their goals). After the Business Analyst has entered full details into the application about how these goals will be carried out, the End System Users will use the application again to review and comment on them."}
};
Actors.ForEach(s => context.Actors.Add(s));
context.SaveChanges();
}
}
}
JustSpecItInitializerclass looks like?