2011-12-17 11 views
34

डिफ़ॉल्ट रूप से, ऐड-प्रवास आदेश रूटक्या ईएफ माइग्रेशन "माइग्रेशन" फ़ोल्डर का स्थान बदलना संभव है?

  • परियोजना में प्रवास .cs फ़ाइल बनाने के लिए प्रयास
    • माइग्रेशन

मैं साथ मेरी माइग्रेशन संग्रह करना चाहते हैं मेरे प्रोजेक्ट के \ डेटा फ़ोल्डर में मेरे बाकी ईएफ-संबंधित कोड के साथ:

  • परियोजना रूट
    • डाटा
      • माइग्रेशन
इस संरचना, जब मैं NuGet सांत्वना मैं निम्न त्रुटि प्राप्त में निष्पादित

PM> add-migration Migration1 

साथ

:

 
    System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\MyProjectRoot\Migrations\201112171635110_Migration1.cs'. 
    at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) 
    at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath) 
    at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options) 
    at System.IO.StreamWriter.CreateFile(String path, Boolean append) 
    at System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding, Int32 bufferSize) 
    at System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding) 
    at System.IO.File.InternalWriteAllText(String path, String contents, Encoding encoding) 
    at System.IO.File.WriteAllText(String path, String contents) 

क्या डिस्क पर स्थान निर्दिष्ट करना संभव है कि माइग्रेशन फ़ाइल को एड-माइग्रेशन कमांड निष्पादित करते समय बनाया जाना चाहिए?

this.MigrationsDirectory = "DirOne\\DirTwo"; 

नाम स्थान विन्यास वर्ग के ही नाम स्थान के रूप में स्थापित किया जाता रहेगा:

+0

कृपया रोजर के समाधान को उत्तर के रूप में चिह्नित करें। यह मेरे लिए काम किया। धन्यवाद। – jordanbtucker

उत्तर

55

विन्यास वर्ग निर्माता में इस लाइन को जोड़ने। इस ऐड इस लाइन (भी विन्यास निर्माता में) बदलने के लिए:

this.MigrationsNamespace = "MyApp.DirOne.DirTwo"; 
+2

+1 ने मुझे परेशानी का एक टन बचाया। मैं अपने सभी Pluralsight वीडियो के माध्यम से एक उदाहरण खोजने की कोशिश कर रहा है जो माइग्रेशन फ़ोल्डर के स्थान के लिए इस डिफ़ॉल्ट विन्यास का वारिस नहीं करता है। आप एक lifesaver हैं। – JustinMichaels

+0

क्या 'web.config' फ़ाइल में इसे निर्दिष्ट करने का कोई तरीका है? –

+0

यह कॉन्फ़िगरेशन क्लास कहां है? –

10

माइग्रेशन फ़ोल्डर निर्दिष्ट करना भी -MigrationsDirectory पैरामीटर का उपयोग कर, enable-migrations आदेश (जो Configuration वर्ग बनाता है) के आह्वान के दौरान संभव है:

enable-migrations -EnableAutomaticMigration:$false -MigrationsDirectory Migrations\CustomerDatabases -ContextTypeName FullyQualifiedContextName 

उदाहरण Configuration कक्षा बनाएगा जो MigrationsDirectory निर्दिष्ट फ़ोल्डर 'माइग्रेशन \ ग्राहक डेटाबेस' सेट करता है जो परियोजना रूट फ़ोल्डर के सापेक्ष है।

public Configuration() 
{ 
    AutomaticMigrationsEnabled = false; 
    MigrationsDirectory = @"Migrations\CustomerDatabases"; 
} 


भी देखें this लेख जो कई संदर्भों और प्रवास फ़ोल्डरों के साथ एक परियोजना के बारे में बताते हैं।

वैसे, अगर आप एक से अधिक माइग्रेशन फोल्डर और कई संदर्भों का उपयोग कर रहे हैं, आप की OnModelCreating विधि DbContext व्युत्पन्न वर्ग (जहां Fluent-एपीआई विन्यास है) में डिफ़ॉल्ट स्कीमा के लिए एक नाम स्थापित करने के लिए भी विचार करें। यह EF6 में काम करेंगे:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.HasDefaultSchema("CustomerDatabases"); 
    } 

, जिसे आप स्कीमा नाम के साथ डेटाबेस तालिकाओं उपसर्ग होगा। यह आपको एक परिदृश्य में एक से अधिक डेटाबेस के साथ एक से अधिक संदर्भों का उपयोग करने में सक्षम करेगा जहां आपके पास टेबल के कई समूह हैं जो दूसरे से स्वतंत्र हैं। (यह माइग्रेशन हिस्ट्री टेबल के अलग-अलग संस्करण भी बनाएगा, ऊपर दिए गए उदाहरण में यह CustomerDatabases.__MigrationHistory होगा)।

संबंधित मुद्दे