63 Stimmen

Alle Entitäten in Entity Framework löschen

Ich möchte den Inhalt aller Tabellen (alle Entitäten) mit Entity Framework 4+ löschen. Wie kann das gemacht werden?

2voto

Johannes Resch Punkte 21

(In .NetCore) Sie können RemoveRange für die Tabelle mit der Tabelle selbst als Parameter verwenden.

Tablename.RemoveRange(Tablename);

2voto

Nismi Mohamed Punkte 556

Das funktioniert bei mir... EF v3.1.5

context.ModelName.RemoveRange(context.ModelName.ToList());
context.SaveChanges();

1voto

Kim Ki Won Punkte 1669

Truncate konnte innerhalb des Fremdschlüssels nicht löschen.

dann machte ich Erweiterung Methode für DbContext.

Die Verwendung ist einfach.

db.Truncates(); // Alle Tabellen werden gelöscht.

db.Truncates("Test1", "Test2"); // nur Tabelle "Test1, Test2" löschen

public static class DbContextExtension
{
    public static int Truncates(this DbContext db, params string[] tables)
    {
        List<string> target = new List<string>();
        int result = 0;

        if (tables == null || tables.Length == 0)
        {
            target = db.GetTableList();
        }
        else
        {
            target.AddRange(tables);
        }

        using (TransactionScope scope = new TransactionScope())
        {
            foreach (var table in target)
            {
                result += db.Database.ExecuteSqlCommand(string.Format("DELETE FROM  [{0}]", table));
                db.Database.ExecuteSqlCommand(string.Format("DBCC CHECKIDENT ([{0}], RESEED, 0)", table));
            }

            scope.Complete();
        }

        return result;
    }

    public static List<string> GetTableList(this DbContext db)
    {
        var type = db.GetType();

        return db.GetType().GetProperties()
            .Where(x => x.PropertyType.Name == "DbSet`1")
            .Select(x => x.Name).ToList();
    }
}

0voto

Arthur Edgarov Punkte 398

Ich möchte meinen Teil dazu beitragen.

Ich habe mir diese Anfrage ausgedacht, die genau das tut, was der Autor verlangt. Dies ist .NET 5.

var query = "sp_MSforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL; SET QUOTED_IDENTIFIER ON; DELETE FROM ?; ALTER TABLE ? CHECK CONSTRAINT ALL;'"
context.Database.ExecuteSqlRaw(query);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X