C# 实体框架代码首先不';不要创建数据库
我试图在实体框架中首先使用代码来生成数据库,但它不起作用。以下是控制台应用程序的C# 实体框架代码首先不';不要创建数据库,c#,entity-framework,C#,Entity Framework,我试图在实体框架中首先使用代码来生成数据库,但它不起作用。以下是控制台应用程序的app.config中的我的连接字符串: <add name="BlogDbContext" connectionString="data source=myserver; initial catalog=CodeFirstDemo; integrated security=SSPI" providerName="System.Data.SqlClient" /> 在Packag
app.config
中的我的连接字符串:
<add name="BlogDbContext"
connectionString="data source=myserver; initial catalog=CodeFirstDemo; integrated security=SSPI"
providerName="System.Data.SqlClient" />
在PackageManager控制台中,我尝试了:启用迁移
,然后添加迁移
,然后更新数据库
。。但什么也没发生
我尝试了其他问题中建议的连接字符串,例如:
<add name="CodeFirstDemo.BlogDbContext"
connectionString="data source=myserver; initial catalog=CodeFirstDemo; integrated security=SSPI"
providerName="System.Data.SqlClient" />
有什么想法吗?添加一个带有以下签名的空构造函数,以引用已添加到app.config的连接字符串:
public BlogDbContext()
: base("Name=BlogDbContext")
{
}
您不需要使用迁移来创建数据库。您可以执行我在Main
方法中显示的操作:
using (var context = new BlogDbContext())
{
context.Database.CreateIfNotExists();
}
由于您首先使用的是代码,因此这些代码应与以下示例中的代码相似:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Post>().ToTable("Post");
base.OnModelCreating(modelBuilder);
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity().ToTable(“Post”);
基于模型创建(modelBuilder);
}
这些将创建实体的数据库表。当您说“什么都没有发生”时,您的意思是说您根本没有从控制台中的命令中得到任何响应吗?他们应该向您提供成功或失败消息,至少…@Claies这是我得到的:指定“-Verbose”标志以查看应用于目标数据库的SQL语句。没有挂起的显式迁移。运行Seed方法。当您使用
-Verbose
标志时,它是否显示SQL语句?它说:目标数据库是:'CodeFirstDemo.BlogDbContext'(数据源:(localdb)\mssqllocaldb,提供程序:System.Data.SqlClient,来源:Convention)。这是什么意思@Claiesit表示它正在使用SQL LocalDB,并且可能已将数据库文件放在项目的\App\u Data\目录中。联机示例未指定对基类的调用。他们就像我一样使用它,它创建了数据库。我不认为你真的需要这么做。一旦您从package manager控制台调用:update database,就会创建数据库,但您的数据库尚未创建,当您执行添加迁移时,没有可比较的内容。这就是为什么您需要首先创建数据库。在此之后,如果您更改了模型,请调用添加迁移和更新数据库命令以使用新的更改更新数据库检查此页面:。这证明了我在上面的评论中所解释的。这对数据库的创建没有影响。EF不必重写OnModelCreating来完成其工作。只有在需要不同的东西时才需要更改默认行为。对,我理解,问题可能是OP的connectionstring无效吗?
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Post>().ToTable("Post");
base.OnModelCreating(modelBuilder);
}