尝试创建新表时对象名称无效

Posted

技术标签:

【中文标题】尝试创建新表时对象名称无效【英文标题】:Invalid object name when trying to create new table 【发布时间】:2019-05-26 20:53:53 【问题描述】:

昨天开始使用 EF6,现在已经很沮丧了。

无论如何,据我的研究表明,如果数据库不存在,EF 可以创建数据库,也可以创建表。所以,我将我的连接字符串传递给我的DbContext,如下所示:

public CampaignDbContext() : base("Data Source=xx;Initial Catalog=NewTestDb;User ID=xx;Password=xx;")
 

我的模型和整个 DbContext 类在这里很可能是不相关的,所以这就是我不添加代码的原因。无论如何,我的模型类被称为Campaign,在 DbContext 类中,我已经声明了这一点:

public DbSet<Campaign> Campaigns  get; set; 

//Also added this
protected override void OnModelCreating(DbModelBuilder modelBuilder)

   Database.SetInitializer<CampaignDbContext>(null);
   base.OnModelCreating(modelBuilder);

现在,通过我的测试方法,当我填充 Campaigns DbSet 并调用时:

CampaignDbContext.SaveChanges();

我得到了错误:

无法打开登录请求的数据库“NewTestDb”。登录失败

在我的编程生涯中,我再次感到震惊。如果在来自代码隐藏的 SSMS/示例 sql 连接中,在连接字符串中传递的相同凭据(在 dbcontext 类中)可以正常工作,但这在这里不起作用。但是当我从 SSMS 手动创建 NewTestDb 时,连接成功。现在,当我调用CampaignDbContextSaveChanges 方法时,我得到:

无效的对象名称“dbo.Campaigns”

我已经阅读了大量的 SO 帖子,并且没有发现我的代码有任何问题。有人能指出我在哪里失踪/我做错了什么吗?

附:我是 EF 的新手。

【问题讨论】:

你能验证Campaigns表确实存在吗? @bolkay,不,我没有。 EF 不应该创建表吗? 该错误表示实体名称与数据库中表的名称不匹配。请在 SMSS 中验证这一点。 @bolkay,我重新创建了数据库,它完全是空的。还有一个问题,为什么 EF 不创建数据库?为什么未预先创建数据库时连接失败? 我不太确定您的意思,但 EF 应该为您创建数据库。我真的建议您检查代码优先方法。您会惊讶于使用 Entity Framework 是多么容易。 entityframeworktutorial.net/code-first/what-is-code-first.aspx 【参考方案1】:

感谢bolkay。我想到了。原来我必须从包管理器控制台运行这些特定命令:

enable-migrations
add-migration InitialMigration
update-database

现在,一切正常! 干杯!

【讨论】:

以上是关于尝试创建新表时对象名称无效的主要内容,如果未能解决你的问题,请参考以下文章

尝试创建表时 Oracle SQL “无效标识符错误”

ORACLE SQL - 创建表时数据类型无效

在创建新表时插入另一个表中的值

SqlException:无效的对象名称“电影”

使用 Pandas 附加 BigQuery 表时如何修复无效架构

不支持文化。参数名称:名称 US 是无效的文化标识符