实体框架代码第一次迁移给出了SqlException:"已经存在一个名为' TableName'的对象。在数据库中。"

时间:2015-04-24 15:10:11

标签: c# asp.net-mvc entity-framework migration code-first

我正在使用Entity Framework 6.3作为MVC 5应用程序,使用SQL Server 2012首先使用代码(第一次)。数据库不存在,它是由EF从头开始创建的。当我尝试启动应用程序,因此EF应该创建数据库时,它会给我以下SqlException错误消息:

"已有一个名为' TableName'的对象在数据库中。"

我的项目中有以下非常基本的实体:

[Table("TableName")]
public class ItemStatus
{
    public int id { get; set; }
    public string Status { get; set; }
}

这就是全部。

如果我将TableName的名称更改为其他内容,例如foofoo,则错误消息会反映此更改。所以我没有把两个模型放在同一个表名或任何明显的表格中。

直到最近,一切都运转正常,我不知道我能改变什么让它像这样打破。我在停止工作之前做的最后一件事就是添加一个新的View Model。完全删除它并没有帮助。

其他信息1: 我的解决方案有两个项目,每个项目都有一个DbContext。 Project2中的DbContext2继承自Project1的DbContext1,后者继承自IdentityDbContext。我在想,也许这与它有关?就像两个项目都试图出于某种原因创建相同的表。虽然我非常确定在尝试创建表之前检查表是否存在。

附加信息2:当我在收到此错误后查看数据库服务器时,我发现它已从Project1中的实体创建了多个其他表,没有明显问题。

附加信息3:如果我还没有说清楚,它今天早些时候工作正常。我已经在我的项目中暂时拥有该实体一段时间没有任何问题,在得到此错误之前我没有改变任何内容。

提前感谢任何建议。

编辑:我应该提到我使用MigrateToLatestVersion作为我的初始化。如果我使用DropCreateDatabseAlways,我就不会遇到问题。

2 个答案:

答案 0 :(得分:0)

您使用的是自动迁移吗?您使用的是MigrateDatabaaseToLatestVersion初始化程序吗?也许_Migrations表以某种方式受损了?我相信EF认为您的初始迁移需要再次运行,您可以通过运行SQL分析器来确认。也许有些东西被错误地重命名了?

答案 1 :(得分:-1)

之前我遇到过这个问题。

转到SQL Server安装目录并尝试删除* .ldf和* .mdf文件。我的文件位于:

C:\Program Files\Microsoft SQL Server\MSSQL12.SQLEXPRESS\MSSQL\DATA\

您可能需要先停止SQL Server。如果它不起作用,请尝试在解决方案目录或C:\Users\YOUR_USER_NAME\

中查找* .ldf和* .mdf文件

如果它不起作用,请尝试创建另一个数据库。在连接字符串中也很容易错过数据库名称配置。

如果您有多个项目,请尝试检查所有* .config文件中的连接字符串。