2014-10-02 7 views
9

पर कोई तरीका है RESEEDस्थानीय डीबी ईएफ का उपयोग कर तालिका? FYI करेंएंटिटी फ्रेमवर्क का उपयोग कर स्थानीय डीबी टेबल को कैसे रेट किया जाए?

DBCC CHECKIDENT('TableName', RESEED, 0) 

:

मैं इस एसक्यूएल कमान उपयोग करने के लिए नहीं करना चाहते, मैं एफई 6.1 का उपयोग कर रहा हूँ।

बहुत बहुत धन्यवाद।

उत्तर

14

मुझे लगता है कि आप तालिका पर प्राथमिक कुंजी को रीसेट करने का प्रयास कर रहे हैं? यदि हां, तो ऐसा करने के लिए ईएफ में कोई रास्ता नहीं है।

आप कहा गया है, आप इस तरह के रूप में एक एसक्यूएल आदेश का उपयोग करने के लिए होगा:

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

लेकिन मैं पूछने के लिए क्यों तुम वैसे भी यह करने के लिए कोशिश कर रहे हैं नहीं है? इससे कोई फर्क नहीं पड़ता कि आपके प्राथमिक कुंजी फ़ील्ड में क्या मूल्य है।

+0

धन्यवाद @ डैरेन, मैं डेटाग्रिड व्यू में रिकॉर्ड नंबर के रूप में प्राथमिक कुंजी दिखाता था, इसलिए मैं टेबल्स को रीड करना चाहता था। –

+1

इससे पहले कि मैं एक छंटनी (संदर्भ। डाटाबेस.एक्सक्यूट एसक्यूएल कॉमांड ("ट्रंकेट टेबल [टेबलनाम]") को कॉल करूंगा;) या हटाएं (context.Database.ExecuteSqlCommand ("[tableName] से हटाएं");) पुराने मानों को मिटा दें ताकि आपके पास कोई डुप्लिकेट नहीं होगा। –

0

रुई 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 
} 
संबंधित मुद्दे