EF Core-在运行时删除架构中的数据库表

时间:2019-06-11 09:02:40

标签: c# sql-server asp.net-web-api asp.net-core entity-framework-core

我有一个使用EF Core和SQL Server配置的ASP.NET Core Web API。我有一个控制器,该控制器在发布后将表添加到数据库中,并在删除时从数据库中删除这些表。添加的表将添加到单独的架构中。

如何在运行时删除新创建的架构中的表?

这是生成表的代码:

RelationalDatabaseCreator databaseCreator = 
    (RelationalDatabaseCreator) context.Database.GetService<IDatabaseCreator>();
databaseCreator.CreateTables();

以及如何将模式名称应用于上下文:

public DbSet<CustomEntity> CustomEntities { get;set; }

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
     base.OnModelCreating(modelBuilder);
     modelBuilder.ApplyConfiguration(new EntityConfiguration<CustomEntity>(nameof(CustomEntities), schemaName));
}

EntityConfiguration类:

public class EntityConfiguration<T> : IEntityTypeConfiguration<T> where T : class
{
    private readonly string tableName;
    private readonly string schema;

    public EntityConfiguration(string tableName, string schema)
    {
        this.tableName = tableName;
        this.schema = schema;
    }

    public void Configure(EntityTypeBuilder<T> builder)
    {
        if (!string.IsNullOrEmpty(schema))
        {
            builder.ToTable(tableName, schema);
        }
    }
}

1 个答案:

答案 0 :(得分:0)

实体框架不具有直接管理模式的功能,因为它是为数据级别的CRUD设计的。您可以使用原始SQL命令来实现此目的,但是,到目前为止,EF Core尚无法立即执行此操作(它只能使用FromSql()来序列化查询)。如果您确定仍要在EF Core中执行此操作,则此帖子可能有用:Execute SQL command in Entity Framework Core 2.0 to delete all data in a table

USING [Database-Name]
EXEC sp_MSforeachtable 'DROP TABLE ?'
GO

您可能需要先删除外键和其他约束。