【问题标题】:Use one DataContext.ExecuteCommand to execute query for multiple tables使用一个 DataContext.ExecuteCommand 对多个表执行查询
【发布时间】:2015-12-19 20:10:09
【问题描述】:

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

db.ExecuteCommand("DELETE From Products");

此方法会为每个表向数据库发出新请求。我想在一个查询中清除表中的数据。但到目前为止,我所有的尝试都没有成功。

是否可以使用DataContext.ExecuteCommand从多个表中删除数据(多个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 entity-framework datacontext sql-server-ce-4


    【解决方案1】:

    这在很大程度上取决于您使用的实际数据库系统 - 但在例如SQL Server,你应该可以有多个 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 Server 中很好 - 但它不能 在 SQL Server CE 中工作。 .

    【讨论】:

    • 关于 FK - 当我为单独的服务器创建 ExecuteCommand 时,我找到了从表中删除数据的正确方法。我希望它可以像你的例子一样在查询中工作?
    • 不知道为什么,但我得到了错误:There was an error parsing the query. [ Token line number = 1,Token line offset = 31,Token in error = DELETE ]
    • 如果context is DataContext 使用context.Database.ExecuteSqlCommandAsync 会更好吗?
    • 您使用的是什么版本版本的SQL Server?这是 SQL Server CE(精简版)吗??
    • AHHHH!!!! 这解释了它(你之前从未提到过 - 请告诉我们你是什么系统使用 - 总是 - 只是“SQL”不是产品 - 它是一种语言 - 所以这通常没有帮助....)。不幸的是,SQL Server COMPACT 不允许在单个命令中使用多个 SQL 语句 - 您不能在 SQL Server CE 中的单个命令中从所有表中删除(real SQL Server可以这样做,没问题)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-11
    • 2023-04-06
    • 1970-01-01
    • 2018-10-11
    相关资源
    最近更新 更多