我有一个使用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);
}
}
}
答案 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
您可能需要先删除外键和其他约束。