gpt4 book ai didi

mysql - 空间/全文/哈希索引和显式索引顺序 EF 的使用不正确

转载 作者:行者123 更新时间:2023-11-29 01:35:19 24 4
gpt4 key购买 nike

我在尝试登录时收到空间/全文/哈希索引和显式索引顺序的使用不正确此错误。

我没有使用 Entity Framework 迁移。

[DbConfigurationType(typeof(MySqlEFConfiguration))]
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("DefaultConnection")
{
}

static ApplicationDbContext()
{
// Set the database intializer which is run once during application start
// This seeds the database with admin user credentials and admin role
Database.SetInitializer<ApplicationDbContext>(new CreateDatabaseIfNotExists<ApplicationDbContext>());
}

public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}


public virtual DbSet<Category> Categories { get; set; }
}

这是我在MySQL中自动生成数据库的代码。我没有迁移文件。

最佳答案

我也遇到了同样的问题,我用继承自 MySqlMigrationSqlGenerator 的自定义类修复了它,然后我重写了 protected override MigrationStatementGenerate (CreateIndexOperation op ) 方法,然后我创建一个继承自 DbConfiguration 的新 EFConfiguration 类,并使用新类设置 SetMigrationSqlGenerator。这是代码:

using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Data.Entity;
using System.Data.Entity.Migrations.History;
using System.Data.Entity.Migrations.Model;
using System.Data.Entity.Migrations.Sql;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MySql.Data.EntityFramework;
using MySql.Data.MySqlClient;

namespace customSqlGenerator.Contexto
{
/// <summary>
/// Inherit from MySqlMigrationSqlGenerator by fixing the Index generation method, set the default type in BTREE
/// <para>(the MySql manual says that in the SQL script syntax it is not necessary to specify it for the innoDB engine)</para>
/// </summary>
public class MyCustomMigrationSQLGenerator : MySqlMigrationSqlGenerator
{
private string TrimSchemaPrefix ( string table )
{
if ( table.StartsWith ( "dbo." ) )
return table.Replace ( "dbo.", "" );
return table;
}

protected override MigrationStatement Generate ( CreateIndexOperation op )
{
StringBuilder sb = new StringBuilder ( );

sb = sb.Append ( "CREATE " );

if ( op.IsUnique )
{
sb.Append ( "UNIQUE " );
}

sb.AppendFormat ( "index `{0}` on `{1}` (", op.Name, TrimSchemaPrefix ( op.Table ) );
sb.Append ( string.Join ( ",", op.Columns.Select ( c => "`" + c + "`" ) ) + ") " );

return new MigrationStatement ( ) { Sql = sb.ToString ( ) };
}
}

/// <summary>
/// Inherit from DbConfiguration to set the new QSL script generator and set the conditions to work with MySQL
/// </summary>
public class MyCustomEFConfiguration : DbConfiguration
{
public MyCustomEFConfiguration ()
{
AddDependencyResolver ( new MySqlDependencyResolver ( ) );
SetProviderFactory ( MySqlProviderInvariantName.ProviderName, new MySqlClientFactory ( ) );
SetProviderServices ( MySqlProviderInvariantName.ProviderName, new MySqlProviderServices ( ) );
SetDefaultConnectionFactory ( new MySqlConnectionFactory ( ) );
SetMigrationSqlGenerator ( MySqlProviderInvariantName.ProviderName, () => new MyCustomMigrationSQLGenerator ( ) );
SetManifestTokenResolver ( new MySqlManifestTokenResolver ( ) );
SetHistoryContext ( MySqlProviderInvariantName.ProviderName,
( existingConnection, defaultSchema ) => new MyCustomHistoryContext ( existingConnection, defaultSchema ) );
}
}

/// <summary>
/// Read and write the migration history of the database during the first code migrations. This class must be in the same assembly as the EF configuration
/// </summary>
public class MyCustomHistoryContext : HistoryContext
{
public MyCustomHistoryContext ( DbConnection existingConnection, string defaultSchema ) : base ( existingConnection, defaultSchema ) { }

protected override void OnModelCreating ( System.Data.Entity.DbModelBuilder modelBuilder )
{
base.OnModelCreating ( modelBuilder );
modelBuilder.Entity<HistoryRow> ( ).HasKey ( h => new { h.MigrationId } );
}
}

}

然后,在我的 DBContext 上添加配置属性,例如:

[DbConfigurationType ( typeof ( MyCustomEFConfiguration ) )]
public class DataBaseContexto : IdentityDbContext<ApplicationUser, ApplicationRole, int, ApplicationUserLogin, ApplicationUserRole, ApplicationUserClaim>
{
public DataBaseContexto () : base ( "defaultConnection" )
{
this.Configuration.LazyLoadingEnabled = true;
}
}

关于mysql - 空间/全文/哈希索引和显式索引顺序 EF 的使用不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51010595/

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