使用一个 DataContext.ExecuteCommand 执行多表查询

Use one DataContext.ExecuteCommand to execute query for multiple tables

我需要从我的 table 数据库中删除所有数据。所以我使用 DataContext.ExecuteCommand.

db.ExecuteCommand("DELETE From Products");

此方法会为每个 table 导致对数据库的新请求。我想在一次查询中清除 table 中的数据。但是到目前为止,我所有的尝试都没有成功。

是否可以使用 DataContext.ExecuteCommand 从多个 table 中删除数据(多个 SQL 查询)?


        try
        {
            using (var context = new DataContext())
            {
                context.DeleteAll();
            }
        }
        catch (Exception exception)
        {
            LogHelper.Log(exception);
        }

private static void DeleteAll(this DataContext context)
        {
            var ctx = ((IObjectContextAdapter)context).ObjectContext;

            ctx.ExecuteStoreCommand("DELETE FROM [RegionProducts]; DELETE FROM [ProductTypes]; DELETE FROM [Measurements]; DELETE FROM [Sizes]; " +
                                    "DELETE FROM [Regions]; DELETE FROM [Types]; DELETE FROM [Categories]; DELETE FROM [Images] where Product_Id is not null; DELETE FROM [Products]; " +
                                    "DELETE FROM [Brands]; DELETE FROM [Images];");
        }

这在很大程度上取决于您正在使用的 实际数据库系统 - 但对于例如SQL 服务器,你应该可以有多个 DELETE 语句 - 用分号分隔 - 像这样:

string deleteQuery = "DELETE FROM dbo.Products; DELETE FROM dbo.OtherTable; DELETE FROM dbo.YetAnotherTable;";

db.ExecuteCommand(deleteQuery);

当然,如果其他表仍然引用其数据,您需要注意任何可能导致删除失败的 FK 关系 - 但应该可以在单个 db.ExecuteCommand 中完成此操作打电话

更新: 不幸的是,在您使用的 SQL Server Compact Edition v4 中,您不能有多个 SQL 单个命令中的语句 - 只是不支持。这种方法在 真实 SQL 服务器中 很好 - 但它 不会 工作在 SQL 服务器 CE ...