Skip to content

Instantly share code, notes, and snippets.

@rqx110
Last active April 18, 2017 08:35
Show Gist options
  • Save rqx110/d1911eb6ef59d8d5a5c9ca27b5a870ad to your computer and use it in GitHub Desktop.
Save rqx110/d1911eb6ef59d8d5a5c9ca27b5a870ad to your computer and use it in GitHub Desktop.
another using MySql in Abp
using System.Data.Common;
using System.Data.Entity;
using Abp.Zero.EntityFramework;
using Microsoft.Extensions.Configuration;
using AlanFlaherty.AdminPanelCore.Authorization.Roles;
using AlanFlaherty.AdminPanelCore.Configuration;
using AlanFlaherty.AdminPanelCore.MultiTenancy;
using AlanFlaherty.AdminPanelCore.Users;
using AlanFlaherty.AdminPanelCore.Web;
using MySql.Data.MySqlClient;
using MySql.Data.Entity;
using System.Data.Entity.Migrations.Sql;
using System.Data.Entity.Migrations.Model;
using System.Collections.Generic;
namespace AlanFlaherty.AdminPanelCore.EntityFramework
{
[DbConfigurationType(typeof(AdminPanelCoreDbConfiguration))]
// [DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]
public class AdminPanelCoreDbContext : AbpZeroDbContext<Tenant, Role, User>
{
/* Define an IDbSet for each entity of the application */
/* Default constructor is needed for EF command line tool. */
public AdminPanelCoreDbContext()
//: base(new MySqlConnection(GetConnectionString()), true)
: base(GetConnectionString())
{
}
private static string GetConnectionString()
{
var configuration = AppConfigurations.Get(
WebContentDirectoryFinder.CalculateContentRootFolder()
);
return configuration.GetConnectionString(
AdminPanelCoreConsts.ConnectionStringName
);
}
/* This constructor is used by ABP to pass connection string.
* Notice that, actually you will not directly create an instance of AdminPanelCoreDbContext since ABP automatically handles it.
*/
public AdminPanelCoreDbContext(string nameOrConnectionString)
: base(nameOrConnectionString)
{
}
/* This constructor is used in tests to pass a fake/mock connection. */
public AdminPanelCoreDbContext(DbConnection dbConnection)
: base(dbConnection, true)
{
}
}
public class AdminPanelCoreDbConfiguration : MySql.Data.Entity.MySqlEFConfiguration
{
public AdminPanelCoreDbConfiguration()
{
SetMigrationSqlGenerator("MySql.Data.MySqlClient", () => new AdminPanelCoreMySqlMigrationSqlGenerator());
SetHistoryContext(
"MySql.Data.MySqlClient", (conn, schema) => new AdminPanelCoreMySqlHistoryContext(conn, schema));
// new MySqlEFConfiguration
// SetProviderServices("MySql.Data.MySqlClient", MySql.Data.MySqlClientMySqlProviderServices.Instance);
// "MySql.Data.MySqlClient",
// "MySql.Data.MySqlClient.MySqlProviderServices.
// System.Data.Entity.SqlServer.SqlProviderServices.Instance
//);
//
// MySQL.Data.Entity.Extensions.MySQLDbContextOptionsExtensions.UseMySQL()
// SetConfiguration(new MySqlEFConfiguration());
//SapientGuardian.MySql.Data.EntityFrameworkCore.Query.ExpressionTranslators.
}
// /*
// *
// <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6" />
// */
//}
}
public class AdminPanelCoreMySqlMigrationSqlGenerator : MySqlMigrationSqlGenerator
{
protected override MigrationStatement Generate(AddForeignKeyOperation addForeignKeyOperation)
{
addForeignKeyOperation.PrincipalTable = addForeignKeyOperation.PrincipalTable.Replace("dbo.", "");
addForeignKeyOperation.DependentTable = addForeignKeyOperation.DependentTable.Replace("dbo.", "");
MigrationStatement ms = base.Generate(addForeignKeyOperation);
return ms;
}
// log all operations to check for dbo
protected override MigrationStatement Generate(AddColumnOperation op)
{
System.Console.WriteLine($"Generate:AddColumnOperation Table name {op.Table}");
return base.Generate(op);
}
protected override MigrationStatement Generate(CreateTableOperation op)
{
System.Console.WriteLine($"Generate:CreateTableOperation Table name {op.Name}");
return base.Generate(op);
}
protected override MigrationStatement Generate(DropTableOperation op)
{
System.Console.WriteLine($"Generate:DropTableOperation Table name {op.Name}");
//op.Name = op.Name.Replace("dbo.", string.Empty);
//DropTableOperation op1 = new DropTableOperation
// (
// op.Name.Replace("dbo.", string.Empty),
// op.RemovedAnnotations,
// op.Inverse,
// )
return base.Generate(op);
}
protected override MigrationStatement Generate(MoveTableOperation op)
{
System.Console.WriteLine($"Generate:MoveTableOperation Table name {op.Name}");
return base.Generate(op);
}
protected override MigrationStatement Generate(RenameTableOperation op)
{
System.Console.WriteLine($"Generate:RenameTableOperation Table name {op.Name}");
return base.Generate(op);
}
protected override MigrationStatement Generate(DropIndexOperation op)
{
System.Console.WriteLine($"Generate:DropIndexOperation Index name {op.Name}, Table Name {op.Table}");
return base.Generate(op);
}
protected override MigrationStatement Generate(CreateIndexOperation op)
{
System.Console.WriteLine($"Generate:CreateIndexOperation Index name {op.Name}, Columns: {string.Join(",", op.Columns)}, Table: {op.Table}");
return base.Generate(op);
}
protected override MigrationStatement Generate(SqlOperation op)
{
System.Console.WriteLine($"Generate:SqlOperation Sql: {op.Sql}");
return base.Generate(op);
}
public override IEnumerable<MigrationStatement> Generate(IEnumerable<MigrationOperation> migrationOperations, string providerManifestToken)
{
System.Console.WriteLine($"Generate:IEnumerable<MigrationOperation>");
// migrationOperations
foreach (MigrationOperation operation in migrationOperations)
{
System.Console.WriteLine($"\t MigrationOperation: {operation}");
}
IEnumerable<MigrationStatement> res = base.Generate(migrationOperations, providerManifestToken);
foreach (MigrationStatement ms in res)
{
ms.Sql = ms.Sql.Replace("dbo.", "");
}
return res;
//return base.Generate(migrationOperations, providerManifestToken);
}
}
public class AdminPanelCoreMySqlHistoryContext : MySqlHistoryContext
{
public AdminPanelCoreMySqlHistoryContext(DbConnection existingConnection, string defaultSchema) : base(existingConnection, defaultSchema)
{
}
}
}
@rqx110
Copy link
Author

rqx110 commented Apr 18, 2017

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment