gpt4 book ai didi

mysql - 当我尝试更新数据库命令 EF6 MYSQL 时出现 AlterProcedureException

转载 作者:可可西里 更新时间:2023-11-01 07:09:32 26 4
gpt4 key购买 nike

我正在尝试使用 mysql 连接器更改 Entity Framework 6 中的表。

错误是:

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`=@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.");
}
}

我可以用命令创建一个数据库,并添加一个新表,但我不能修改表的列(删除列或添加列)。问题不在于 drop,而是 AlterStoredProcedure 方法。

最佳答案

您的异常是:“System.NotImplementedException:AlterProcedureOperation”

这就是我 found :

Check out the manual page for stored routines ...

"ALTER PROCEDURE | FUNCTION can modify only the characteristic and comment of a stored procedure or function. However, you cannot change the parameters or body of a stored procedure using this statement; to make such changes, you must drop and re-create the procedure using DROP PROCEDURE and CREATE PROCEDURE."

因此请尝试将您的迁移更改为DROP 和 CREATE 而不是 ALTER

关于mysql - 当我尝试更新数据库命令 EF6 MYSQL 时出现 AlterProcedureException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35372601/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com