2015-06-11 6 views
5

जब MySql साथ EF6 का उपयोग कर मैं निम्नलिखित असहज स्थिति हो रहा है बिना एसक्यूएल उत्पन्न करता है: हर बार मैं एक नया माइग्रेशन मैं अपने विकास के वातावरण में परिवर्तन लागू बनाने का उपयोग करEF6 MySQL: अद्यतन-डाटाबेस -Script अर्धविराम

 Update-Database 

लेकिन मैं

 Update-Database -Script 

का उपयोग जब मैं अपने अन्य वातावरण के लिए SQL स्क्रिप्ट उत्पन्न करने के लिए (और स्रोत नियंत्रण में रखने के लिए) चाहते हैं और उत्पन्न एसक्यूएल कुछ इस तरह है:

CREATE TABLE `AddressType` (`Id` NVARCHAR(10) NOT NULL ,`Description` NVARCHAR(30) NOT NULL ,PRIMARY KEY (`Id`)) ENGINE=INNODB AUTO_INCREMENT=0 
CREATE TABLE `Bank` (`Id` INT NOT NULL ,`CNPJ` BIGINT NOT NULL ,`Name` NVARCHAR(100) ,`WebSite` NVARCHAR(500) ,PRIMARY KEY (`Id`)) ENGINE=INNODB AUTO_INCREMENT=0 

जब मैं SQLyog पर जेनरेट की गई स्क्रिप्ट चलाने का प्रयास करता हूं और इसे चलाता हूं तो मुझे एक त्रुटि मिलती है कि मेरी स्क्रिप्ट में अमान्य वाक्यविन्यास है। मेरा मानना ​​है कि ऐसा इसलिए है क्योंकि ईएफ ने इसके अंत में केवल एक सेमीकॉलन जोड़ा, क्योंकि जब मैं अर्धविराम मैन्युअल रूप से जोड़ता हूं तो यह चलता है। जब मैं अर्धविराम जोड़ता हूं तो एक समस्या यह है कि यदि स्क्रिप्ट किसी कारण से विफल हो जाती है तो डेटाबेस असंगत स्थिति में होता है, जिसका अर्थ है कि माइग्रेशन सिस्टम आगे विफल हो जाएगा क्योंकि टेबल/कॉलम पहले से मौजूद होंगे।

क्या कोई ऐसी सेटिंग है जो प्रत्येक कथन के बाद स्वचालित रूप से अर्धविराम जोड़ती है? क्या कोई तरीका है कि मैं अपनी स्क्रिप्ट/माइग्रेशन चलाने के दौरान MySQL को या कुछ भी करने के लिए कह सकता हूं?

धन्यवाद। Configuration.cs में

/// <summary> 
/// Custom MigrationSqlGenerator to add semi-colons to the end of 
/// all migration statements. 
/// </summary> 
public class CustomMySqlMigrationSqlGenerator : MySqlMigrationSqlGenerator { 
    public override IEnumerable<MigrationStatement> Generate(IEnumerable<MigrationOperation> migrationOperations, string providerManifestToken) { 
     IEnumerable<MigrationStatement> statements = base.Generate(migrationOperations, providerManifestToken); 
     foreach (MigrationStatement statement in statements) { 
      if (!statement.Sql.EndsWith(";")) { 
       statement.Sql = statement.Sql.TrimEnd() + ";"; 
      } 
     } 
     return statements; 
    } 
} 

और सक्षम यह:

उत्तर

2

आप इस प्रकार MySqlMigrationSqlGenerator का विस्तार करके ऐसा कर सकते हैं

public Configuration() { 
    AutomaticMigrationsEnabled = false; 
    SetSqlGenerator("MySql.Data.MySqlClient", new CustomMySqlMigrationSqlGenerator()); 
} 
संबंधित मुद्दे