Orchardcms Orchard CMS-获取当前数据迁移记录版本号
以字符串形式给出迁移类的名称,如何获取存储在Orchard_Framework_DataMigrationRecord中的当前版本号Orchardcms Orchard CMS-获取当前数据迁移记录版本号,orchardcms,Orchardcms,以字符串形式给出迁移类的名称,如何获取存储在Orchard_Framework_DataMigrationRecord中的当前版本号 我可以在IExtensionManager中看到版本,但这似乎只是module.txt中定义的模块版本。好的,所以我自己解决了这个问题- 我知道Orchard在启动迁移方法时一定已经在执行类似于我所需的代码,所以我创建了一个新的迁移文件,并在Create()方法上设置了一个断点。当断点到达时,我通过调用堆栈查找Orchard.Data.Migration中的Dat
我可以在IExtensionManager中看到版本,但这似乎只是module.txt中定义的模块版本。好的,所以我自己解决了这个问题- 我知道Orchard在启动迁移方法时一定已经在执行类似于我所需的代码,所以我创建了一个新的迁移文件,并在Create()方法上设置了一个断点。当断点到达时,我通过调用堆栈查找Orchard.Data.Migration中的DataMigrationManager。我所需要的一切都在那里,如果其他人有类似的要求,我建议他们从这个课程开始 这几乎是直接从那门课上提出来的:
string moduleName="Your.Module.Name";
var migrations = GetDataMigrations(moduleName);
// apply update methods to each migration class for the module
var current = 0;
foreach (var migration in migrations)
{
// copy the objet for the Linq query
var tempMigration = migration;
// get current version for this migration
var dataMigrationRecord = GetDataMigrationRecord(tempMigration);
if (dataMigrationRecord != null)
{
current = dataMigrationRecord.Version.Value;
}
// do we need to call Create() ?
if (current == 0)
{
// try to resolve a Create method
var createMethod = GetCreateMethod(migration);
if (createMethod != null)
{
//create method has been written, but not executed!
current = (int)createMethod.Invoke(migration, new object[0]);
}
}
}
Context.Output.WriteLine("Version: {0}", current);
您可能需要以下几种方法:
private DataMigrationRecord GetDataMigrationRecord(IDataMigration tempMigration)
{
return _dataMigrationRepository.Table
.Where(dm => dm.DataMigrationClass == tempMigration.GetType().FullName)
.FirstOrDefault();
}
private static MethodInfo GetCreateMethod(IDataMigration dataMigration)
{
var methodInfo = dataMigration.GetType().GetMethod("Create", BindingFlags.Public | BindingFlags.Instance);
if (methodInfo != null && methodInfo.ReturnType == typeof(int))
{
return methodInfo;
}
return null;
}
不要忘记注入您可能需要的任何依赖项 你需要它做什么?好问题-我正在用几个助手扩展命令行工具;其中之一是一个命令,用于删除类、方法和文件,以创建一个新的小部件,类似于codegen模块。我需要知道模块在哪个迁移版本上,这样我就可以创建UpdateFromX()方法(其中X是当前版本+1)哦,还有其他一些东西-我觉得每个模块都有一个迁移号。我现在认为这是错误的——一个模块可以有多个迁移类,版本号指的是每个类