实体框架 - 数据库优先 - 从数据库完成EF模型更新时的拦截

时间:2018-01-10 11:51:48

标签: c# entity-framework

这是一个有趣的场景:我使用数据库优先场景(存在的原因)。我经常从数据库更新模型。我使用自定义.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();

然后开始进一步处理。

0 个答案:

没有答案