2016-02-12 11 views
5

मैं mysql कनेक्टर के साथ इकाई फ्रेमवर्क 6 में एक तालिका को बदलने की कोशिश कर रहा हूं।AlterProcedureException जब मैं अद्यतन-डेटाबेस कमांड का प्रयास करता हूं EF6 MYSQL

त्रुटि है:

PM> update-database -verbose 
Using StartUp project 'Facade'. 
Using NuGet project 'DAL'. 
Specify the '-Verbose' flag to view the SQL statements being applied to the target database. 
Target database is: 'GiveAndGet' (DataSource: localhost, Provider: MySql.Data.MySqlClient, Origin: Configuration). 
Applying explicit migrations: [201602122108206_2]. 
Applying explicit migration: 201602122108206_2. 
System.NotImplementedException: AlterProcedureOperation 
    en MySql.Data.Entity.MySqlMigrationSqlGenerator.Generate(IEnumerable`1 migrationOperations, String providerManifestToken) 
    en System.Data.Entity.Migrations.DbMigrator.GenerateStatements(IList`1 operations, String migrationId) 
    en System.Data.Entity.Migrations.Infrastructure.MigratorBase.GenerateStatements(IList`1 operations, String migrationId) 
    en System.Data.Entity.Migrations.DbMigrator.ExecuteOperations(String migrationId, VersionedModel targetModel, IEnumerable`1 operations, IEnumerable`1 systemOperations, Boolean downgrading, Boolean auto) 
    en System.Data.Entity.Migrations.DbMigrator.ApplyMigration(DbMigration migration, DbMigration lastMigration) 
    en System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.ApplyMigration(DbMigration migration, DbMigration lastMigration) 
    en System.Data.Entity.Migrations.DbMigrator.Upgrade(IEnumerable`1 pendingMigrations, String targetMigrationId, String lastMigrationId) 
    en System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.Upgrade(IEnumerable`1 pendingMigrations, String targetMigrationId, String lastMigrationId) 
    en System.Data.Entity.Migrations.DbMigrator.UpdateInternal(String targetMigration) 
    en System.Data.Entity.Migrations.DbMigrator.<>c__DisplayClassc.<Update>b__b() 
    en System.Data.Entity.Migrations.DbMigrator.EnsureDatabaseExists(Action mustSucceedToKeepDatabase) 
    en System.Data.Entity.Migrations.Infrastructure.MigratorBase.EnsureDatabaseExists(Action mustSucceedToKeepDatabase) 
    en System.Data.Entity.Migrations.DbMigrator.Update(String targetMigration) 
    en System.Data.Entity.Migrations.Infrastructure.MigratorBase.Update(String targetMigration) 
    en System.Data.Entity.Migrations.Design.ToolingFacade.UpdateRunner.Run() 
    en System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate) 
    en System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate) 
    en System.Data.Entity.Migrations.Design.ToolingFacade.Run(BaseRunner runner) 
    en System.Data.Entity.Migrations.Design.ToolingFacade.Update(String targetMigration, Boolean force) 
    en System.Data.Entity.Migrations.UpdateDatabaseCommand.<>c__DisplayClass2.<.ctor>b__0() 
    en System.Data.Entity.Migrations.MigrationsDomainCommand.Execute(Action command) 
AlterProcedureOperation 

मेरे संदर्भ है:

[DbConfigurationType(typeof(MySqlEFConfiguration))] 
    public class GiveAndGetContext : DbContext 
    { 

     public GiveAndGetContext() 
     : base("GiveAndGetContext") 
     { 
      //Database.SetInitializer(
      //  new MigrateDatabaseToLatestVersion<GiveAndGetContext, DAL.Migrations.Configuration>("GiveAndGetContext")); 

     } 


     //Para crear des de presentation 
     // // Constructor to use on a DbConnection that is already opened 
     // public GiveAndGetContext(DbConnection existingConnection, bool contextOwnsConnection) 
     //: base(existingConnection, contextOwnsConnection) 
     // { 

     // } 

     protected override void OnModelCreating(DbModelBuilder modelBuilder) 
     { 
      base.OnModelCreating(modelBuilder); 
      modelBuilder.Entity<Category>().MapToStoredProcedures(); 
      modelBuilder.Entity<City>().MapToStoredProcedures(); 
      modelBuilder.Entity<Controller>().MapToStoredProcedures(); 
      modelBuilder.Entity<Country>().MapToStoredProcedures(); 
      modelBuilder.Entity<Interest>().MapToStoredProcedures(); 
      modelBuilder.Entity<Item>().MapToStoredProcedures(); 
      modelBuilder.Entity<Language>().MapToStoredProcedures(); 
      modelBuilder.Entity<Literal>().MapToStoredProcedures(); 
      modelBuilder.Entity<Province>().MapToStoredProcedures(); 
      modelBuilder.Entity<Region>().MapToStoredProcedures(); 
      modelBuilder.Entity<User>().MapToStoredProcedures(); 
      modelBuilder.Entity<View>().MapToStoredProcedures(); 
      modelBuilder.Entity<prueba>().MapToStoredProcedures(); 
     } 
} 
} 

Configuration file of migrations is: 

internal sealed class Configuration : DbMigrationsConfiguration<DAL.Context.GiveAndGetContext> 
    { 
     public Configuration() 
     { 
      AutomaticMigrationsEnabled = false; 

      SetSqlGenerator("MySql.Data.MySqlClient", new MySql.Data.Entity.MySqlMigrationSqlGenerator()); 

     } 

मेरे package.config फ़ाइल है:

<?xml version="1.0" encoding="utf-8"?> 
<packages> 
    <package id="EntityFramework" version="6.1.3" targetFramework="net46" /> 
    <package id="MySql.Data" version="6.9.8" targetFramework="net46" /> 
    <package id="MySql.Data.Entity" version="6.9.8" targetFramework="net46" /> 
</packages> 

और उदाहरण ऐड-प्रवास के फ़ाइल है:

using System; 
    using System.Data.Entity.Migrations; 

    public partial class _2 : DbMigration 
    { 
     public override void Up() 
     { 
      AlterColumn("dbo.pruebas", "Name", c => c.Short(nullable: false)); 
      AlterStoredProcedure(
       "dbo.prueba_Insert", 
       p => new 
        { 
         IdController = p.Short(), 
         Name = p.Short(), 
        }, 
       body: 
        @"SET SESSION sql_mode='ANSI';INSERT INTO `pruebas`(
         `IdController`, 
         `Name`) VALUES (
         @IdController, 
         @Name); 
         SELECT 
         `Id` 
         FROM `pruebas` 
         WHERE row_count() > 0 AND `Id`=last_insert_id();" 
      ); 

      AlterStoredProcedure(
       "dbo.prueba_Update", 
       p => new 
        { 
         Id = p.Short(), 
         IdController = p.Short(), 
         Name = p.Short(), 
        }, 
       body: 
        @"UPDATE `pruebas` SET `IdController`[email protected], `Name`[email protected] WHERE `Id` = @Id;" 
      ); 

     } 

     public override void Down() 
     { 
      AlterColumn("dbo.pruebas", "Name", c => c.String(unicode: false)); 
      throw new NotSupportedException("Scaffolding create or alter procedure operations is not supported in down methods."); 
     } 
    } 

मैं कमांड के साथ डेटाबेस बना सकता हूं, और एक नई तालिका जोड़ सकता हूं, लेकिन मैं किसी तालिका के कॉलम को संशोधित नहीं कर सकता (ड्रॉप कॉलम या कॉलम जोड़ें)। समस्या ड्रॉप नहीं है, यह AlterStoredProcedure विधि है।

उत्तर

0

आपका अपवाद नहीं है: "System.NotImplementedException: AlterProcedureOperation"

और है कि मैं found था है:

चेक बाहर संग्रहीत दिनचर्या के लिए मैन्युअल पृष्ठ ...

"प्रक्रिया बदल | फ़ंक्शन केवल संग्रहित प्रक्रिया या फ़ंक्शन की टिप्पणी को संशोधित कर सकता है। हालांकि, आप इस कथन का उपयोग करके संग्रहीत प्रक्रिया के पैरामीटर या बॉडी को नहीं बदल सकते हैं;परऐसे परिवर्तन करते हैं, आपको ड्रॉप प्रक्रिया का उपयोग करके प्रक्रिया को छोड़ना और फिर से बनाना होगा। "

तो छोड़ने के लिए अपनी प्रवास को बदलने और बनाने के बजाय ALTER

करने की कोशिश
संबंधित मुद्दे

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