I'm trying to alter a table in Entity Framework 6 with mysql connectors.
The error is:
GaussianNB()
My context is:
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
My package.config file is:
[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());
}
And example file of add-migration is:
<?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>
I can create a database with commands, and add a new table, but I can't modify a column of a table (drop column or add column). The problem isn't drop, it's 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`=@IdController, `Name`=@Name 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.");
}
}
method.
答案 0 :(得分:0)
您的例外是:&#34; System.NotImplementedException:AlterProcedureOperation&#34;
那是我found:
查看存储例程的手册页...
&#34; ALTER程序| FUNCTION只能修改特征和 存储过程或函数的注释。但是,你无法改变 使用此语句的存储过程的参数或主体;至 进行此类更改时,必须删除并重新创建该过程 DROP程序和创建程序。&#34;
因此,请尝试将迁移更改为 DROP并创建而不是ALTER