C# 实体框架代码第一次迁移时给出SqlException:“;已经有一个名为';表名';在数据库中。”;
我将EntityFramework6.3用于MVC5应用程序,在SQLServer2012中首先(首次)使用代码。该数据库以前并不存在,它是由EF从头开始创建的。当我尝试启动应用程序,因此EF应该创建数据库时,它会给我以下SqlException错误消息: “数据库中已存在名为“TableName”的对象。” 我的项目中有以下非常基本的实体:C# 实体框架代码第一次迁移时给出SqlException:“;已经有一个名为';表名';在数据库中。”;,c#,asp.net-mvc,entity-framework,migration,code-first,C#,Asp.net Mvc,Entity Framework,Migration,Code First,我将EntityFramework6.3用于MVC5应用程序,在SQLServer2012中首先(首次)使用代码。该数据库以前并不存在,它是由EF从头开始创建的。当我尝试启动应用程序,因此EF应该创建数据库时,它会给我以下SqlException错误消息: “数据库中已存在名为“TableName”的对象。” 我的项目中有以下非常基本的实体: [Table("TableName")] public class ItemStatus { public int id { get; set;
[Table("TableName")]
public class ItemStatus
{
public int id { get; set; }
public string Status { get; set; }
}
仅此而已
如果我将TableName的名称更改为其他名称,如foofoo,那么错误消息将反映此更改。因此,我没有使用相同的表名或任何明显的类似名称将两个模型放入
直到最近,一切都很好,我不确定我能做些什么来让它像这样破裂。在它停止工作之前,我做的最后一件事是添加一个新的视图模型。完全删除此选项没有帮助
补充资料1:
我的解决方案有两个项目,每个项目都有一个DbContext。Project2中的DbContext2从Project1中的DbContext1继承,而Project1又从IdentityDbContext继承。我在想也许这和它有关?因为某种原因,两个项目都试图创建同一个表。虽然我很确定在创建表之前应该检查表是否存在
附加信息2:当我在收到此错误后查看数据库服务器时,我看到它从Project1中的实体创建了多个其他表,没有明显的问题
附加信息3:如果我还没有说清楚的话,今天早些时候它运行良好。在我的项目中,这个实体已经存在了一段时间,没有任何问题,在出现这个错误之前,我没有对它做任何更改
提前谢谢你的建议
编辑:我应该提到我正在使用MigrateToLatestVersion作为我的初始化。如果我使用DropCreateDatabaseWays,我不会遇到问题。我以前有过这个问题 转到SQL server安装目录并尝试删除*.ldf和*.mdf文件。我的文件位于:
C:\Program Files\Microsoft SQL Server\MSSQL12.SQLEXPRESS\MSSQL\DATA\
在此之前,您可能需要停止SQL server。如果不起作用,请尝试在解决方案目录或C:\Users\u USER\u NAME\
如果不起作用,请尝试创建另一个数据库。连接字符串中的数据库名称配置也很容易丢失
如果有多个项目,请尝试检查所有*.config文件中的连接字符串。是否使用自动迁移?您是否使用MigratedataBaseToLatestVersion初始值设定项?也许迁移表不知什么原因损坏了?我相信EF认为您的初始迁移需要再次运行,您可以通过运行SQL profiler来确认这一点。可能重命名不正确?在此之前,两个项目是否在同一个DB模式中创建了各自的DB对象?是的。Project2使用DbContext2创建了一个数据库。DbContext2继承自DbContext1。Project1无法自行运行。您的代码是否在其他地方使用了特定的表
[table(“TableName”)]
?否。我可以确定这一点,因为如果我将此特定表的名称更改为我绝对不使用的名称(例如,fooobaahbah),则会出现相同的错误,但这次它说它正试图使对象fooboobaahbah,但不能,因为它已经存在。重置框架迁移。我正在使用MigrateDatabaseToLatestVersion。如果我更改为DropCreateDatabaseAlways初始化选项,那么问题就会消失,这也许并不奇怪。在运行DropCreateAlways选项一次后,返回到MigrateDatabaseToLatestVersion,会看到问题恢复。有一个迁移历史记录表,但其中没有任何有用的查找信息。我删除了文件,但它们仍在master DB中引用。删除数据库是正确的方法