Ich möchte den Inhalt aller Tabellen (alle Entitäten) mit Entity Framework 4+ löschen. Wie kann das gemacht werden?
Antworten
Zu viele Anzeigen?
Johannes Resch
Punkte
21
Nismi Mohamed
Punkte
556
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();
}
}
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);
- See previous answers
- Weitere Antworten anzeigen