实体框架代码优先不创建数据库

时间:2016-06-08 20:00:46

标签: c# entity-framework

我正在尝试在Entity Framework中使用代码优先生成数据库,但它无法正常工作。这是我在控制台应用程序的app.config中的连接字符串:

<add name="BlogDbContext" 
     connectionString="data source=myserver; initial catalog=CodeFirstDemo; integrated security=SSPI" 
     providerName="System.Data.SqlClient" />

这是我的program.cs文件代码:

using System.Data.Entity;

namespace CodeFirstDemo
{
    public class Post
    {
        public int PostId { get; set; }
        public System.DateTime DatePublished { get; set; }
        public string Title { get; set; }
        public string Body { get; set; }
    }

    public class BlogDbContext : DbContext
    {
        public DbSet<Post> Posts { get; set; }
    }

    class Program
    {
        static void Main(string[] args)
        {
        }
    }
}

在包管理器控制台中,我尝试了:enable-migration,然后是add-migration,然后是update-database ..但没有发生任何事情。

我按照其他问题的建议尝试了连接字符串:

<add name="CodeFirstDemo.BlogDbContext" 
     connectionString="data source=myserver; initial catalog=CodeFirstDemo; integrated security=SSPI" 
     providerName="System.Data.SqlClient" />

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

添加一个带有以下签名的空构造函数,以引用已添加到app.config的连接字符串:

  public BlogDbContext()
        : base("Name=BlogDbContext")
  {
  }

您无需使用迁移来创建数据库。您可以执行我在Main方法中显示的内容:

using (var context = new BlogDbContext())
{
    context.Database.CreateIfNotExists();
}

答案 1 :(得分:-1)

由于您使用的是代码优先,因此您应该使用与以下示例相似的代码:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Post>().ToTable("Post");
            base.OnModelCreating(modelBuilder);
    }

这些将创建实体的数据库表。