谢谢斯科特,
过了一会儿,我找到了一个很好的方法来管理这个。
基本上,我创建了一个任务,它获取与构建相关的当前变更集(我的问题的第 1 点不是问题),然后遍历它们以查找 .sql 文件。一旦我有了这些列表,我就可以创建一个更改脚本或针对目标数据库执行它们。
代码看起来像这样:
TeamFoundationServer tfs = new TeamFoundationServer(TfsServerUrl);
VersionControlServer vcs = (VersionControlServer)tfs.GetService(typeof(VersionControlServer));
var buildServer = (IBuildServer)tfs.GetService(typeof(IBuildServer));
IBuildDetail build = buildServer.GetBuild(
new Uri(BuildUri)
, null
, QueryOptions.All
);
build.RefreshAllDetails();
var changesets = InformationNodeConverters.GetAssociatedChangesets(build);
foreach (var changesetSummary in changesets)
{
Changeset changeSet = vcs.GetChangeset(changesetSummary.ChangesetId);
sqlFilePaths.AddRange(
ProcessChangeSet(changeSet)
);
}
ProcessChangeSet 中的代码看起来像
List<string> sqlFilePaths = new List<string>();
foreach (Change change in changeSet.Changes)
{
if ((change.Item.ItemType == ItemType.File)
&& (change.Item.ServerItem.EndsWith(".sql", StringComparison.OrdinalIgnoreCase))
)
{
sqlFilePaths.Add(
sqlPath
);
}
}
return sqlFilePathes;
但是如果有人想要我很乐意给他们完整的代码。确保存储过程在整个系统中保持同步。这只会让架构更改在我的数据库中手动管理,我很乐意这样做。