删除了数据库中的表。如何让实体框架重新制作?

时间:2016-07-08 16:07:45

标签: c# entity-framework

我错误地认为如果我删除了数据库中的表,那么EF下次运行update-database时会重新创建一个空表。

现在我有一个缺少的表,因此应用程序在遇到对它的引用时会抛出异常。

有没有办法让EF重新制作表而不完全删除数据库?

3 个答案:

答案 0 :(得分:1)

问题是EF在上次迁移的快照中有表,所以如果你想让EF重新创建它,你可以这样做:

1)通过注释掉DbSet和OnModelCreating(如果存在)暂时删除该类。

2)运行迁移,以便EF从快照中删除表。您需要注释掉Up()方法中删除表的代码,因为它已被删除。

3)取消注释第1步代码。

4)运行另一次迁移以重新添加表格。

https://msdn.microsoft.com/en-US/data/dn481501?f=255&MSPPError=-2147217396

答案 1 :(得分:0)

只需注释来自DbContext和更新的表属性。然后Un Comment属性和更新这将创建一个新表而不删除整个数据库(这适用于我在通过包管理器控制台进行更新时)

答案 2 :(得分:0)

1)从头开始在您的计算机本地创建数据库

2)用SSM打开数据库并选择所需的表

3)在表格上单击鼠标右键,然后选择“脚本表为”,然后选择“创建到” - >这将生成表创建为Sql string

4)在应用程序ExecuteSqlCommand

中执行生成查询

我的电脑上的例子:

string toBeCreatetable = @"  
CREATE TABLE [dbo].[Customers]( 
    [CustomerId] [int] IDENTITY(1,1) NOT NULL, 
    [Name] [nvarchar](max) NULL, 
 CONSTRAINT [PK_Customers] PRIMARY KEY CLUSTERED  
( 
    [CustomerId] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]"; 

// Somewhere in code before at the begin do:    
using (var ctx = new myDbContext(toBeCreatetable))
{
    int executed= myDbContext.Database.ExecuteSqlCommand()
}

这是保证迁移历史记录能够正确使用概念模型的最佳方法。