barakisbrown
barakisbrown

Reputation: 1323

Entity Framework -Update-Database- Does not create Database

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.

Upvotes: 4

Views: 10745

Answers (3)

Michael M.
Michael M.

Reputation: 71

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.

Upvotes: 1

Francois Muller
Francois Muller

Reputation: 566

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.

Upvotes: 0

Nurzhan Aitbayev
Nurzhan Aitbayev

Reputation: 807

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

Upvotes: 6

Related Questions