为Entity Framework Code First准备数据库

时间:2014-09-29 15:21:59

标签: c# sql sql-server asp.net-mvc entity-framework

我有一个现有的MS SqlServer,我想在MVC 4项目中使用Entity Framework Code First方法向其添加新数据库。

首先,几行代码: Global.asax中

  public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            Database.SetInitializer<IncidentData.IncidentContext>(new IncidentData.IncidentDbInitializer());

            using (var a = new IncidentData.IncidentContext())
            {
                a.Database.CreateIfNotExists();

            }

            WebApiConfig.Register(GlobalConfiguration.Configuration);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
            SqlDependency.Start(ConfigurationManager.ConnectionStrings["IncidentContext"].ConnectionString);
        }

        protected void Application_End()
        {
            SqlDependency.Stop(ConfigurationManager.ConnectionStrings["IncidentContext"].ConnectionString);
        }
    }

IncidentDbInitializer.cs:

 public class IncidentDbInitializer : CreateDatabaseIfNotExists<IncidentContext>
    {
        protected override void Seed(IncidentContext context)
        {
            base.Seed(context);

            // add some data
            context.SaveChanges();
        }


    }

IncidentContext.cs

  public class IncidentContext : DbContext
    {
        public IncidentContext()
            : base()
        {

        }


        public DbSet<Incident> Incidents { get; set; }


        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
        //some code
         }
}

现在,问题是没有调用种子方法。我认为这是因为我没有配置SQL服务器,因为我曾经让它工作但是很久以前我现在需要准备文档如何设置它。

如何使EF能够创建新数据库?

我试过了:

  1. 仅准备在服务器上登录 - 然后它缺少数据库用户,EF无法创建数据库。
  2. 创建数据库,添加用户并将其分配给先前创建的登录,然后删除数据库 - EF创建数据库,但不调用种子方法,因此它是空的。调用OnModelCreating。
  3. 在这种情况下,正确的做法是什么?我应该为此SQL登录提供什么凭据,以便它可以创建数据库?

    据我记得,当我最近上班时,我只是检查了一切,但它确实有效,但现在即便如此也无法完成任务。既然它有效,我认为代码很好,但配置是ekhm flappy:)

0 个答案:

没有答案