4

Visual Studio 2013

I am trying to learn asp.net MVC over at PluralSight. I created a project(dll) called eManagr.Domain with the following classes: Department / Employee / IDepartmentDatasource

Department.cs

public class Department
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual ICollection<Employee> Employees { get; set; }
}

Employee.cs

public class Employee
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
}

IDepartmentDataSource

public interface IDepartmentDataSource
{
    IQueryable<Employee> Employees { get; }
    IQueryable<Department> Departments { get; }
}

I created an infrastructure folder with the following file : DepartmentDb.cs

public class DepartmentDb : DbContext, IDepartmentDataSource
{
    public DbSet<Employee> Employees {get; set;}
    public DbSet<Department> Departments {get; set;}

    IQueryable<Employee> IDepartmentDataSource.Employees
    {
        get { return Employees;  }
    }

    IQueryable<Department> IDepartmentDataSource.Departments
    {
        get { return Departments; }
    }
}

I then created another project using MVC 4 called eManager.Web with Internet Template during the creation of the project.

When running Enable-Migration it says I have two[eWeb.Domain , eWeb.Model.Users] which then I tell it Enable-Migration with the following command:

Enable-Migration -ContextTypeName DepartmentDb

which creates the migration folder and a file called Configurations.cs

    public Configuration()
    {
        AutomaticMigrationsEnabled = true;
    }

    protected override void Seed(eManager.Web.Infrastructure.DepartmentDb context)
    {
        context.Departments.AddOrUpdate(t => t.Name,
            new Department() { Name="Engineering"},
            new Department() { Name = "Sales" },
            new Department() { Name = "Shipping" },
            new Department() { Name = "HR" }
            );
    }

EDIT -- Connection String from Web.Config --

<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=aspnet-eManager.Web-20140216202751;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnet-eManager.Web-20140216202751.mdf" providerName="System.Data.SqlClient" />

When I run the following I get the following reponse: PM> update-database Specify the '-Verbose' flag to view the SQL statements being applied to the target database. No pending code-based migrations. Running Seed method. PM>

After this runs, I suppose to see a database file in my App_Data but it does not exist and when I use SQL Server Object Explorer, the database is not created even though that is what I am trying to do.

3 Answers 3

6

Could you provide your connection string from Web.config? Also, is there a Data Connection (Server Explorer -> Data Connections) named the same as your connection String?

I think, adding a parameter-less constructor to your DepartmentDb context class could solve your problem

public DepartmentDb ()
        : base("name=DefaultConnection")

Where name=DefaultConnection has to be your connection string name

Sign up to request clarification or add additional context in comments.

1 Comment

Thanks .. I was banging my head and it was simple. What I am doing is based off a tutorial I am following and the person is doing it did not have the connection string in his class but it worked on his instance.
1

I just ran into something very similar. I encountered it when I was going through the following ASP.NET MVC tutorial: https://www.asp.net/mvc/overview/older-versions/getting-started-with-ef-5-using-mvc-4/creating-an-entity-framework-data-model-for-an-asp-net-mvc-application

In my case, the problem seemed to be that I already had a database table of that name. I had gone through the tutorial partway previously about a month ago, but was interrupted and had to abort. Even though I deleted the entire Project, it seemed that the database table name may have been retained.

I say seemed to be, because the problem disappeared with the following solution: after a 2nd delete of the project, I carefully substituted 'Contoso' for 'ContosoUniversity' in every relevant situation.

Before the problem was solved, I was repeatedly getting the (0x80131904-error) in the Package Manager Console when trying to update-database, and a notice that the mdf file could not be connected to the database. However, when I checked the appropriate directory, the mdf file was not even being created.

FYI For beginning MVC-ers in Visual Studio 2012, I do recommend going through the following MVC tutorial before the one above. https://www.asp.net/mvc/overview/older-versions/getting-started-with-aspnet-mvc4/intro-to-aspnet-mvc-4 A MVC5 Visual Studio 2013 version is also available through that link. The tutorial of the first paragraph makes a few jumps...

I could not have debugged the issue if I'd started with the EF5 tutorial as my first MVC project.

Comments

0

I noticed that you enabled your migration in the correct way, have you run: add-migration "give it a name" ? once this has been completed you will notice a new file in the migrations folder. you wont be able to update database with out creating a new migration.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.