Czy istnieje sposób na: RESEED a LocalDB Tabela przy użyciu EF?Jak RESEED LocalDB Table przy użyciu Entity Framework?
ja wolą nie korzystać z tego polecenia SQL:
DBCC CHECKIDENT('TableName', RESEED, 0)
FYI: Używam EF 6.1.
Wielkie dzięki.
Czy istnieje sposób na: RESEED a LocalDB Tabela przy użyciu EF?Jak RESEED LocalDB Table przy użyciu Entity Framework?
ja wolą nie korzystać z tego polecenia SQL:
DBCC CHECKIDENT('TableName', RESEED, 0)
FYI: Używam EF 6.1.
Wielkie dzięki.
Zakładam, że próbujesz zresetować klucz podstawowy na stole? Jeśli tak, to w EF nie ma takiej możliwości.
Jak można stwierdzić, trzeba by użyć polecenia SQL, takich jak:
context.Database.ExecuteSqlCommand("DBCC CHECKIDENT('TableName', RESEED, 0)")
Ale muszę zapytać, dlaczego starasz się to zrobić tak? Nie powinno mieć znaczenia, jaka wartość znajduje się w polu klucza podstawowego.
Dzięki Rui Jarimba miło answer, to lepiej napisać metodę rozszerzenia jak poniżej, jeśli potrzebujesz DBCC CHECKIDENT
wszędzie:
public static class ContextExtensions
{
public static void DbccCheckIdent<T>(this DbContext context, int? reseedTo = null) where T : class
{
context.Database.ExecuteSqlCommand(
$"DBCC CHECKIDENT('{context.GetTableName<T>()}',RESEED{(reseedTo != null ? "," + reseedTo: "")});" +
$"DBCC CHECKIDENT('{context.GetTableName<T>()}',RESEED);");
}
public static string GetTableName<T>(this DbContext context) where T : class
{
var objectContext = ((IObjectContextAdapter) context).ObjectContext;
return objectContext.GetTableName<T>();
}
public static string GetTableName<T>(this ObjectContext context) where T : class
{
var sql = context.CreateObjectSet<T>().ToTraceString();
var regex = new Regex(@"FROM\s+(?<table>.+)\s+AS");
var match = regex.Match(sql);
var table = match.Groups["table"].Value;
return table;
}
}
I cieszyć się prostą rozmowę do niego:
using (var db = new LibraryEntities())
{
db.DbccCheckIdent<Book>(); //which Book is one of your entities
db.DbccCheckIdent<Book>(0); //if you want to pass a new seed
}
Thanks @ Darren, pokazywałem klucz podstawowy jako numer rekordu w DataGridView, więc chciałem RESEED Tabele. –
wcześniej wywoływałbym skrócone (context.Database.ExecuteSqlCommand ("TRUNCATE TABLE [TableName]");) lub usuń (context.Database.ExecuteSqlCommand ("DELETE FROM [TableName]");) aby wymazać stare wartości nie będziesz mieć żadnych duplikatów. –