这是一个有趣的场景:我使用数据库优先场景(存在的原因)。我经常从数据库更新模型。我使用自定义.tt
文件来创建我的类。
如何在EF模型更新完成后立即运行自定义工具?我已经想到了这一步。
如果我运行我的.tt
文件两次,我得到了我今天所需的内容,但我希望在完成EF模型更新以更新.edmx
之前自动执行我的自定义步骤运行的过程运行.tt
个文件。
回答我自己的问题..在tt文件中发生任何转换之前运行自定义工具。封装到常见的tt文件中,它也可以用于解决方案中的其他项目。
// get solution path
var serviceProvider = mainTextTransform.Host as IServiceProvider;
var dte = serviceProvider.GetService(typeof(EnvDTE.DTE)) as EnvDTE.DTE;
string solDir = System.IO.Path.GetDirectoryName(dte.Solution.FullName);
// get project path
string t = new DirectoryInfo(mainTextTransform.Host.ResolvePath(".")).FullName.ToString();
// this tool modifies the edmx on the text level to make the adjustments you need
string command = @" "+solDir +@"\toolDirectory\bin\Debug\toolExecutable "+t;
System.Diagnostics.ProcessStartInfo procStartInfo = new System.Diagnostics.ProcessStartInfo("cmd", "/c " + command);
procStartInfo.RedirectStandardOutput = true;
procStartInfo.UseShellExecute = false;
procStartInfo.CreateNoWindow = true;
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo = procStartInfo;
proc.Start();
然后开始进一步处理。