रुई Jarimba के अच्छा answer की मदद से, यह बेहतर है नीचे की तरह एक विस्तार विधि लिखने अगर आप DBCC CHECKIDENT
हर जगह की जरूरत करने के लिए:
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;
}
}
और यह करने के लिए सरल कॉल का आनंद लें:
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
}
स्रोत
2018-01-21 21:14:11
धन्यवाद @ डैरेन, मैं डेटाग्रिड व्यू में रिकॉर्ड नंबर के रूप में प्राथमिक कुंजी दिखाता था, इसलिए मैं टेबल्स को रीड करना चाहता था। –
इससे पहले कि मैं एक छंटनी (संदर्भ। डाटाबेस.एक्सक्यूट एसक्यूएल कॉमांड ("ट्रंकेट टेबल [टेबलनाम]") को कॉल करूंगा;) या हटाएं (context.Database.ExecuteSqlCommand ("[tableName] से हटाएं");) पुराने मानों को मिटा दें ताकि आपके पास कोई डुप्लिकेट नहीं होगा। –