【问题标题】:Code First Entity Framework does not create database with tablesCode First Entity Framework 不使用表创建数据库
【发布时间】:2017-10-04 11:47:29
【问题描述】:

我有几个模型(类)。

City.cs:

public class City
{
    [ScaffoldColumn(false)]
    public int CityID { get; set; }
    public string Name { get; set; }

    public virtual ICollection<Course> Courses { get; set; }
}

课程.cs:

public class Course
{
    [ScaffoldColumn(false)]
    public int ID { get; set; }

    public string Faculty { get; set; }

    public int CityID { get; set; }
}

CourseDatabaseInitializer.cs:

using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;

namespace CoursesApplication.Models
{
    public class CourseDatabaseInitializer : DropCreateDatabaseAlways<CourseContext>
    {
        CourseContext _Context = new CourseContext();
        protected override void Seed(CourseContext context)
        {
            GetCities().ForEach(c => context.Cities.Add(c));
        }

        private static List<City> GetCities()
        {
            var cities = new List<City> {
                new City
                {
                    CityID = 1,
                    Name = "Paris"
                }
            };

            return cities;
        }

        public List<Course> GetCourses()
        {
            return (from c in _Context.Courses select c).ToList();
        }
    }
}

CourseContext.cs:

using System.Data.Entity;

namespace CoursesApplication.Models
{
    public class CourseContext : DbContext
    {
        public CourseContext(): base("CoursesApplication")
        {
        }

        public DbSet<Course> Courses { get; set; }
        public DbSet<City> Cities { get; set; }
    }
}

还有我的 Global.asax.cs 文件:

void Application_Start(object sender, EventArgs e)
    {
        // Code that runs on application startup
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);

        // Initialize the Courses database.
        Database.SetInitializer(new CourseDatabaseInitializer());
    }

,但是当我运行应用程序时,一切正常。之后在解决方案资源管理器中创建连接,但没有带表的数据库。这是我的web.config,带有连接字符串:

<add name="CourseContext"
    connectionString="Data Source=(LocalDb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\courses.mdf;
Integrated Security=True"providerName="System.Data.SqlClient" />

问题可能出在哪里? 我将 NET Framework 4.6.1 与 Sql Express 2016 一起使用。 这是 ASP.NET WEB 窗体项目。

【问题讨论】:

  • 在哪里检查数据库是否是在 SSMS 上创建的?
  • SSMS 和 VS 中的服务器资源管理器,服务器名称为 (LocalDb)\MSSQLLocalDB,这是Web.config 中的connectionString 的一部分
  • 您是否运行过enable-migrations,然后运行add-migration Init,然后运行update-database来创建数据库?
  • 同样的事情,没有创建数据库。
  • 执行这些命令后,我看到文件夹Migrations 里面有几个文件,但是数据库仍然没有创建。

标签: c# asp.net entity-framework asp.net-mvc-4 webforms


【解决方案1】:

CourseContext 尝试更改此设置

public CourseContext(): base("CoursesApplication")
{
}

到这里

public CourseContext(): base("CourseContext")
{
}

或删除: base("CoursesApplication")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多