EF Core 6 - Truncate Table

Cenk 666 Reputation points
2023-01-25T06:54:42.34+00:00

Hi,

How can I use the truncate table in EF Core 6? I tried this but didn't delete rows.

_oyunPalasContext.RazerReconciliation.FromSqlRaw("TRUNCATE TABLE RazerReconciliation");
C#
C#
An object-oriented and type-safe programming language that has its roots in the C family of languages and includes support for component-oriented programming.
6,964 questions
Entity Framework Core
Entity Framework Core
A lightweight, extensible, open-source, and cross-platform version of the Entity Framework data access technology.
422 questions
No comments
{count} votes

Accepted answer
  1. Jack J Jun 19,216 Reputation points Microsoft Employee
    2023-01-25T09:34:50.47+00:00

    @Cenk, Welcome to Microsoft Q&A, based on my test, I reproduced your problem.

    As usual, FromSqlRaw method is used to query the data from the database.

    If you want to execute some sqlcommand in ef core, you could try to use ExecuteSqlRaw method.

    Here is a code example you could refer to.

    MyContext context=new MyContext();
    context.Database.ExecuteSqlRaw("TRUNCATE TABLE stus");
    

    Based on my test, the above code could clear all the data of table stus.

    Hope my code could help you.

    Best Regards,

    Jack


    If the answer is the right solution, please click "Accept Answer" and upvote it.If you have extra questions about this answer, please click "Comment".

    Note: Please follow the steps in our documentation to enable e-mail notifications if you want to receive the related email notification for this thread.

    No comments

1 additional answer

Sort by: Most helpful
  1. Karen Payne MVP 29,236 Reputation points Microsoft MVP
    2023-01-25T11:22:57.64+00:00

    Although Database.ExecuteSqlRaw works I would use a method such as the following which validates the table was actually truncated and if there is an exception you can log it.

    public static (bool success, Exception exception) TruncateTable(string? connectionString, string tableName)
    {
        var truncateStatement = $"TRUNCATE TABLE {tableName};";
        using var cn = new SqlConnection(connectionString);
        using var cmd = new SqlCommand(truncateStatement, cn);
        cn.Open();
        try
        {
            cmd.ExecuteNonQuery();
            cmd.CommandText = $"SELECT COUNT(*) FROM dbo.{tableName}";
            return (Convert.ToInt32(cmd.ExecuteScalar()) == 0, null)!;
        }
        catch (Exception ex)
        {
    
            return (false, ex);
        }
    }
    

    So in this example there is a table Post to truncate

    using var context = new Context();
    var (success, exception) = TruncateTable(context.Database.GetConnectionString(), nameof(Post));
    if (success)
    {
        // done
    }
    else
    {
        // inspect exception
    }
    
    No comments