2014-10-02 10 views

risposta

14

Suppongo che tu stia cercando di reimpostare la chiave primaria sul tavolo? Se è così, no non c'è modo in EF di farlo.

Come lei ha affermato, si dovrà utilizzare un comando SQL, ad esempio:

context.Database.ExecuteSqlCommand("DBCC CHECKIDENT('TableName', RESEED, 0)") 

Ma devo chiedere perché si sta cercando di fare questo comunque? Non dovrebbe essere importante per te quale valore è nel tuo campo chiave primaria.

+0

Grazie @ Darren, ero solito mostrare la chiave primaria come numero di record in DataGridView, quindi volevo RESEED Tables. –

+1

prima chiamerei un troncato (context.Database.ExecuteSqlCommand ("TRUNCATE TABLE [TableName]");) o delete (context.Database.ExecuteSqlCommand ("DELETE FROM [TableName]");) per cancellare i vecchi valori così non avrai duplicati –

0

Con l'aiuto di Rui Jarimba di bello answer, è meglio scrivere un metodo di estensione, come di seguito se avete bisogno di DBCC CHECKIDENT ovunque:

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; 
    } 
} 

E godere semplice chiamata ad esso:

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 
} 
Problemi correlati