public void AddCe35Database(object sender, ExecutedRoutedEventArgs e) { // http://www.mztools.com/articles/2007/MZ2007011.aspx if (!Helpers.DataConnectionHelper.DDEXProviderIsInstalled(new Guid(Resources.SqlCompact35Provider))) { EnvDTEHelper.ShowError("The version 3.5 Visual Studio DDEX provider is not installed, cannot add connection"); return; } try { var objIVsDataConnectionDialogFactory = package.GetServiceHelper(typeof(IVsDataConnectionDialogFactory)) as IVsDataConnectionDialogFactory; var objIVsDataConnectionDialog = objIVsDataConnectionDialogFactory.CreateConnectionDialog(); objIVsDataConnectionDialog.AddAllSources(); objIVsDataConnectionDialog.SelectedSource = new Guid("130BADA6-E128-423c-9D07-02E4734D45D4"); objIVsDataConnectionDialog.SelectedProvider = new Guid(Resources.SqlCompact35Provider); if (objIVsDataConnectionDialog.ShowDialog() && objIVsDataConnectionDialog.SelectedProvider == new Guid(Resources.SqlCompact35Provider)) { Helpers.DataConnectionHelper.SaveDataConnection(package, objIVsDataConnectionDialog.EncryptedConnectionString, objIVsDataConnectionDialog.DisplayConnectionString, DatabaseType.SQLCE35, new Guid(Resources.SqlCompact35Provider)); ExplorerControl control = _parentWindow.Content as ExplorerControl; control.BuildDatabaseTree(); Helpers.DataConnectionHelper.LogUsage("DatabasesAddCe35Database"); } objIVsDataConnectionDialog.Dispose(); } catch (Exception ex) { Helpers.DataConnectionHelper.SendError(ex, DatabaseType.SQLCE35); } }
public void GenerateCeDgmlFiles(object sender, ExecutedRoutedEventArgs e) { var databaseInfo = ValidateMenuInfo(sender); if (databaseInfo == null) { return; } if (package == null) { return; } var dte = package.GetServiceHelper(typeof(DTE)) as DTE; var fd = new SaveFileDialog { Title = "Save generated DGML file as", Filter = "DGML (*.dgml)|*.dgml", OverwritePrompt = true, ValidateNames = true }; var result = fd.ShowDialog(); if (!result.HasValue || result.Value != true) { return; } var fileName = fd.FileName; try { using (var repository = Helpers.RepositoryHelper.CreateRepository(databaseInfo.DatabaseInfo)) { var generator = DataConnectionHelper.CreateGenerator(repository, fileName, databaseInfo.DatabaseInfo.DatabaseType); generator.GenerateSchemaGraph(databaseInfo.DatabaseInfo.Caption, Properties.Settings.Default.IncludeSystemTablesInDocumentation, false); if (dte != null) { dte.ItemOperations.OpenFile(fileName); dte.ActiveDocument.Activate(); } DataConnectionHelper.LogUsage("DatabaseScriptDGML"); } } catch (Exception ex) { DataConnectionHelper.SendError(ex, DatabaseType.SQLCE35, false); } }
internal static void RemoveDataConnection(SqlCeToolboxPackage package, string connectionString, Guid provider) { var removals = new List <IVsDataExplorerConnection>(); var dataExplorerConnectionManager = package.GetServiceHelper(typeof(IVsDataExplorerConnectionManager)) as IVsDataExplorerConnectionManager; foreach (var connection in dataExplorerConnectionManager.Connections.Values) { var objProviderGuid = connection.Provider; if ((objProviderGuid == new Guid(Resources.SqlCompact35Provider)) || (objProviderGuid == new Guid(Resources.SqlCompact40Provider))) { if (Microsoft.VisualStudio.Data.Services.DataProtection.DecryptString(connection.EncryptedConnectionString) == connectionString) { removals.Add(connection); } } } for (int i = removals.Count - 1; i >= 0; i--) { try { dataExplorerConnectionManager.RemoveConnection(removals[i]); } catch (ArgumentException) { } catch (IndexOutOfRangeException) { } } }
internal static void SaveDataConnection(SqlCeToolboxPackage package, string encryptedConnectionString, DatabaseType dbType, Guid provider) { if (package.GetServiceHelper(typeof(IVsDataExplorerConnectionManager)) is IVsDataExplorerConnectionManager dataExplorerConnectionManager) { var savedName = GetFileName(DataProtection.DecryptString(encryptedConnectionString), dbType); dataExplorerConnectionManager.AddConnection(savedName, provider, encryptedConnectionString, true); } }
internal void ScanConnections(SqlCeToolboxPackage package) { var dte = package.GetServiceHelper(typeof(DTE)) as DTE2; var helper = RepositoryHelper.CreateEngineHelper(DatabaseType.SQLCE40); EnvDteHelper dteHelper = new EnvDteHelper(); var list = dteHelper.GetSqlCeFilesInActiveSolution(dte); foreach (var path in list) { if (File.Exists(path)) { bool versionFound = false; SQLCEVersion version = SQLCEVersion.SQLCE20; try { version = helper.DetermineVersion(path); versionFound = true; } catch { // ignored } string connectionString = string.Format("Data Source={0}", path); if (versionFound) { if (version == SQLCEVersion.SQLCE35) { SaveDataConnection(connectionString, DatabaseType.SQLCE35, package); } else if (version == SQLCEVersion.SQLCE40) { SaveDataConnection(connectionString, DatabaseType.SQLCE40, package); } } else { var dbInfo = new DatabaseInfo() { DatabaseType = DatabaseType.SQLite, ConnectionString = connectionString }; try { using (var repo = Helpers.RepositoryHelper.CreateRepository(dbInfo)) { repo.GetAllTableNames(); } SaveDataConnection(connectionString, DatabaseType.SQLite, package); } catch { // ignored } } } } }
internal static void SaveDataConnection(SqlCeToolboxPackage package, string connectionString, string testString, DatabaseType dbType, Guid provider, bool encryptedString = true) { var dataExplorerConnectionManager = package.GetServiceHelper(typeof(IVsDataExplorerConnectionManager)) as IVsDataExplorerConnectionManager; if (dataExplorerConnectionManager != null) { string savedName = GetFileName(testString, dbType); dataExplorerConnectionManager.AddConnection(savedName, provider, connectionString, encryptedString); } }
private bool TryGetInitialPath(SqlCeToolboxPackage package, out string path) { var dte = package.GetServiceHelper(typeof(EnvDTE.DTE)) as EnvDTE.DTE; EnvDTEHelper dteHelper = new EnvDTEHelper(); try { path = dteHelper.GetInitialFolder(dte); return(true); } catch { path = null; return(false); } }
void item_Click(object sender, EventArgs e) { try { var menuItem = BuildMenuItemForCommandHandler(); if (menuItem == null) { return; } var menuInfo = menuItem.CommandParameter as MenuCommandParameters; using (IRepository repository = new ServerDBRepository(menuInfo.DatabaseInfo.ConnectionString, true)) { var generator = DataConnectionHelper.CreateGenerator(repository, menuInfo.DatabaseInfo.DatabaseType); generator.GenerateTableContent(menuItem.Tag as string, false, Properties.Settings.Default.IgnoreIdentityInInsertScript); if (!Properties.Settings.Default.IgnoreIdentityInInsertScript) { generator.GenerateIdentityReset(menuItem.Tag as string, false); } ScriptFactory.Instance.CreateNewBlankScript(ScriptType.Sql); var dte = _package.GetServiceHelper(typeof(DTE)) as DTE; if (dte != null) { var doc = (TextDocument)dte.Application.ActiveDocument.Object(null); doc.EndPoint.CreateEditPoint().Insert(generator.GeneratedScript); doc.DTE.ActiveDocument.Saved = true; } DataConnectionHelper.LogUsage("TableScriptAsData"); } } catch (Exception ex) { DataConnectionHelper.SendError(ex, DatabaseType.SQLServer, false); } }
public void GenerateDataContextInProject(object sender, ExecutedRoutedEventArgs e) { var databaseInfo = ValidateMenuInfo(sender); if (databaseInfo == null) { return; } var isDesktop = (bool)((MenuItem)sender).Tag; if (package == null) { return; } var dte = package.GetServiceHelper(typeof(DTE)) as DTE; if (dte == null) { return; } if (dte.Mode == vsIDEMode.vsIDEModeDebug) { EnvDteHelper.ShowError("Cannot generate code while debugging"); return; } var helper = Helpers.RepositoryHelper.CreateEngineHelper(databaseInfo.DatabaseInfo.DatabaseType); if (!helper.IsV35DbProviderInstalled()) { EnvDteHelper.ShowError("This feature requires the SQL Server Compact 3.5 SP2 DbProvider to be properly installed"); return; } var dteH = new EnvDteHelper(); var project = dteH.GetProject(dte); if (project == null) { EnvDteHelper.ShowError("Please select a project in Solution Explorer, where you want the DataContext to be placed"); return; } if (!isDesktop && !dteH.AllowedWpProjectKinds.Contains(new Guid(project.Kind))) { EnvDteHelper.ShowError("The selected project type does not support Windows Phone (please let me know if I am wrong)"); return; } if (isDesktop && !dteH.AllowedProjectKinds.Contains(new Guid(project.Kind))) { EnvDteHelper.ShowError("The selected project type does not support LINQ to SQL (please let me know if I am wrong)"); return; } if (project.Properties.Item("TargetFrameworkMoniker") == null) { EnvDteHelper.ShowError("The selected project type does not support Windows Phone - missing TargetFrameworkMoniker"); return; } if (!isDesktop) { if (project.Properties.Item("TargetFrameworkMoniker").Value.ToString() == "Silverlight,Version=v4.0,Profile=WindowsPhone71" || project.Properties.Item("TargetFrameworkMoniker").Value.ToString() == "WindowsPhone,Version=v8.0" || project.Properties.Item("TargetFrameworkMoniker").Value.ToString() == "WindowsPhone,Version=v8.1" ) { } else { EnvDteHelper.ShowError("The selected project type does not support Windows Phone 7.1/8.0 - wrong TargetFrameworkMoniker: " + project.Properties.Item("TargetFrameworkMoniker").Value); return; } } if (isDesktop && !project.Properties.Item("TargetFrameworkMoniker").Value.ToString().Contains(".NETFramework")) { EnvDteHelper.ShowError("The selected project type does not support .NET Desktop - wrong TargetFrameworkMoniker: " + project.Properties.Item("TargetFrameworkMoniker").Value); return; } if (!isDesktop && databaseInfo.DatabaseInfo.DatabaseType != DatabaseType.SQLCE35) { EnvDteHelper.ShowError("Sorry, only version 3.5 databases are supported for now"); return; } var sqlMetalPath = ProbeSqlMetalRegPaths(); if (string.IsNullOrEmpty(sqlMetalPath)) { EnvDteHelper.ShowError("Could not find SQLMetal file location"); return; } var sdfFileName = string.Empty; try { using (var repository = Helpers.RepositoryHelper.CreateRepository(databaseInfo.DatabaseInfo)) { var tables = repository.GetAllTableNames(); var pks = repository.GetAllPrimaryKeys(); var checkedTables = string.Empty; foreach (var tableName in tables) { var pk = pks.Where(k => k.TableName == tableName).FirstOrDefault(); if (pk.TableName == null) { checkedTables += tableName + Environment.NewLine; } } if (!string.IsNullOrEmpty(checkedTables)) { var message = string.Format("The tables below do not have Primary Keys defined,{0}and will not be generated properly:{1}{2}", Environment.NewLine, Environment.NewLine, checkedTables); EnvDteHelper.ShowError(message); } var dbInfo = repository.GetDatabaseInfo(); foreach (var kvp in dbInfo) { if (kvp.Key == "Database") { sdfFileName = kvp.Value; break; } } sdfFileName = Path.GetFileName(sdfFileName); } var fileNameWithoutExtension = Path.GetFileNameWithoutExtension(databaseInfo.DatabaseInfo.Caption); if (fileNameWithoutExtension != null) { var model = fileNameWithoutExtension.Replace(" ", string.Empty).Replace("#", string.Empty).Replace(".", string.Empty).Replace("-", string.Empty); model = model + "Context"; var dcDialog = new DataContextDialog(); dcDialog.ModelName = model; dcDialog.IsDesktop = isDesktop; dcDialog.ProjectName = project.Name; dcDialog.NameSpace = project.Properties.Item("DefaultNamespace").Value.ToString(); if (EnvDteHelper.VbProject == new Guid(project.Kind)) { dcDialog.CodeLanguage = "VB"; } else { dcDialog.CodeLanguage = "C#"; } var result = dcDialog.ShowModal(); if (!result.HasValue || result.Value != true || string.IsNullOrWhiteSpace(dcDialog.ModelName)) { return; } if (dcDialog.AddRowversionColumns) { AddRowVersionColumns(databaseInfo); } var sdfPath = databaseInfo.DatabaseInfo.ConnectionString; //If version 4.0, create a 3.5 schema sdf, and use that as connection string if (isDesktop && databaseInfo.DatabaseInfo.DatabaseType == DatabaseType.SQLCE40) { var tempFile = Path.GetTempFileName(); using (var repository = Helpers.RepositoryHelper.CreateRepository(databaseInfo.DatabaseInfo)) { var generator = DataConnectionHelper.CreateGenerator(repository, tempFile, databaseInfo.DatabaseInfo.DatabaseType); generator.ScriptDatabaseToFile(Scope.Schema); } if (sdfFileName != null) { sdfPath = Path.Combine(Path.GetTempPath(), sdfFileName); } using (Stream stream = new MemoryStream(Resources.SqlCe35AddinStore)) { // Create a FileStream object to write a stream to a file using (var fileStream = File.Create(sdfPath, (int)stream.Length)) { // Fill the bytes[] array with the stream data var bytesInStream = new byte[stream.Length]; stream.Read(bytesInStream, 0, bytesInStream.Length); // Use FileStream object to write to the specified file fileStream.Write(bytesInStream, 0, bytesInStream.Length); } } var info = new DatabaseInfo { ConnectionString = "Data Source=" + sdfPath, DatabaseType = DatabaseType.SQLCE35 }; using (var repository = Helpers.RepositoryHelper.CreateRepository(info)) { var script = File.ReadAllText(tempFile); repository.ExecuteSql(script); } sdfPath = info.ConnectionString; } var versionNumber = GetVersionTableNumber(databaseInfo.DatabaseInfo, isDesktop); model = dcDialog.ModelName; var dcPath = Path.Combine(Path.GetTempPath(), model + ".cs"); if (dcDialog.CodeLanguage == "VB") { dcPath = Path.Combine(Path.GetTempPath(), model + ".vb"); } var parameters = " /provider:SQLCompact /code:\"" + dcPath + "\""; parameters += " /conn:\"" + sdfPath + "\""; parameters += " /context:" + model; if (dcDialog.Pluralize) { parameters += " /pluralize"; } if (!string.IsNullOrWhiteSpace(dcDialog.NameSpace)) { parameters += " /namespace:" + dcDialog.NameSpace; } var dcH = new DataContextHelper(); var sqlmetalResult = dcH.RunSqlMetal(sqlMetalPath, parameters); if (!File.Exists(dcPath)) { EnvDteHelper.ShowError("Error during SQL Metal run: " + sqlmetalResult); return; } if (!isDesktop) { using (var repository = Helpers.RepositoryHelper.CreateRepository(databaseInfo.DatabaseInfo)) { if (dcDialog.CodeLanguage == "VB") { DataContextHelper.FixDataContextVB(dcPath, model, dcDialog.NameSpace, sdfFileName, repository); } else { DataContextHelper.FixDataContextCS(dcPath, model, dcDialog.NameSpace, sdfFileName, repository); } } } if (dcDialog.MultipleFiles) { var classes = DataContextHelper.SplitIntoMultipleFiles(dcPath, dcDialog.NameSpace, model); var projectPath = project.Properties.Item("FullPath").Value.ToString(); foreach (var item in classes) { var fileName = Path.Combine(projectPath, item.Key + ".cs"); if (File.Exists(fileName)) { File.Delete(fileName); } File.WriteAllText(fileName, item.Value); var classItem = dteH.GetProjectDataContextClass(project, fileName); if (classItem != null) { classItem.Delete(); } project.ProjectItems.AddFromFile(fileName); } } else { var extension = ".cs"; if (dcDialog.CodeLanguage == "VB") { extension = ".vb"; } var dcItem = dteH.GetProjectDc(project, model, extension); if (dcItem == null) { project.ProjectItems.AddFromFileCopy(dcPath); } else { if (EnvDteHelper.ShowMessageBox("The Data Context class already exists in the project, do you wish to replace it?", OLEMSGBUTTON.OLEMSGBUTTON_YESNO, OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_SECOND, OLEMSGICON.OLEMSGICON_QUERY) == System.Windows.Forms.DialogResult.Yes) { dcItem.Delete(); project.ProjectItems.AddFromFileCopy(dcPath); } } } EnvDteHelper.AddReference(project, "System.Data.Linq"); if (dcDialog.AddConnectionStringBuilder) { var projectPath = project.Properties.Item("FullPath").Value.ToString(); var fileName = "LocalDatabaseConnectionStringBuilder.cs"; var filePath = Path.Combine(projectPath, fileName); if (File.Exists(filePath)) { File.Delete(filePath); } using (Stream stream = new MemoryStream(Resources.LocalDatabaseConnectionStringBuilder)) { // Create a FileStream object to write a stream to a file using (var fileStream = File.Create(filePath, (int)stream.Length)) { // Fill the bytes[] array with the stream data var bytesInStream = new byte[stream.Length]; stream.Read(bytesInStream, 0, bytesInStream.Length); // Use FileStream object to write to the specified file fileStream.Write(bytesInStream, 0, bytesInStream.Length); } } project.ProjectItems.AddFromFile(filePath); } // Creates __Version table and adds one row if desired if (dcDialog.AddVersionTable) { using (var repository = Helpers.RepositoryHelper.CreateRepository(databaseInfo.DatabaseInfo)) { var list = repository.GetAllTableNames(); if (!list.Contains("__VERSION")) { repository.ExecuteSql(string.Format(@" CREATE TABLE [__VERSION] ( [SchemaVersion] int NOT NULL , [DateUpdated] datetime NOT NULL DEFAULT (GETDATE()) ); GO CREATE INDEX [IX_SchemaVersion] ON [__VERSION] ([SchemaVersion] DESC); GO INSERT INTO [__VERSION] ([SchemaVersion]) VALUES ({0}); GO", versionNumber)); } } } DataConnectionHelper.LogUsage("DatabaseCreateDC"); } } catch (Exception ex) { DataConnectionHelper.SendError(ex, databaseInfo.DatabaseInfo.DatabaseType, false); } }
internal static Dictionary <string, DatabaseInfo> GetDataConnections(SqlCeToolboxPackage package, bool includeServerConnections, bool serverConnectionsOnly) { // http://www.mztools.com/articles/2007/MZ2007018.aspx Dictionary <string, DatabaseInfo> databaseList = new Dictionary <string, DatabaseInfo>(); var dataExplorerConnectionManager = package.GetServiceHelper(typeof(IVsDataExplorerConnectionManager)) as IVsDataExplorerConnectionManager; //Test code... //var objIVsDataProviderManager = package.GetServiceHelper(typeof(IVsDataProviderManager)) as IVsDataProviderManager; //var objIVsDataConnectionManager = package.GetServiceHelper(typeof(IVsDataConnectionManager)) as IVsDataConnectionManager; //var objIVsDataSourceManager = package.GetServiceHelper(typeof(IVsDataSourceManager)) as IVsDataSourceManager; //IVsDataProvider objIVsDataProvider; //foreach (var objIVsDataSource in objIVsDataSourceManager.Sources) //{ // //System.Diagnostics.Debug.WriteLine(objIVsDataSource.DisplayName); // //System.Diagnostics.Debug.WriteLine(objIVsDataSource.Guid.ToString()); // //foreach (var objProviderGuid in objIVsDataSource.GetProviders()) // //{ // // objIVsDataProvider = objIVsDataProviderManager.GetDataProvider(objProviderGuid); // // System.Diagnostics.Debug.WriteLine(objIVsDataProvider.DisplayName); // // System.Diagnostics.Debug.WriteLine(objIVsDataProvider.Guid.ToString()); // //} //} // End test code Guid provider35 = new Guid(Resources.SqlCompact35Provider); Guid provider40 = new Guid(Resources.SqlCompact40Provider); Guid provider40Private = new Guid(Resources.SqlCompact40PrivateProvider); Guid providerSqLite = new Guid(Resources.SQLiteProvider); Guid providerSqlitePrivate = new Guid(Resources.SqlitePrivateProvider); bool isV35Installed = RepositoryHelper.IsV35Installed() && DdexProviderIsInstalled(provider35); bool isV40Installed = RepositoryHelper.IsV40Installed() && (DdexProviderIsInstalled(provider40) || DdexProviderIsInstalled(provider40Private)); if (dataExplorerConnectionManager != null) { foreach (var connection in dataExplorerConnectionManager.Connections.Values) { try { var objProviderGuid = connection.Provider; if (!serverConnectionsOnly) { if ((objProviderGuid == provider35 && isV35Installed) || (objProviderGuid == provider40 && isV40Installed) || (objProviderGuid == provider40Private && isV40Installed)) { DatabaseType dbType = DatabaseType.SQLCE40; if (objProviderGuid == provider35) { dbType = DatabaseType.SQLCE35; } var serverVersion = "4.0"; if (dbType == DatabaseType.SQLCE35) { serverVersion = "3.5"; } var sConnectionString = DataProtection.DecryptString(connection.EncryptedConnectionString); if (!sConnectionString.Contains("Mobile Device")) { DatabaseInfo info = new DatabaseInfo() { Caption = connection.DisplayName, FromServerExplorer = true, DatabaseType = dbType, ServerVersion = serverVersion, ConnectionString = sConnectionString }; info.FileIsMissing = RepositoryHelper.IsMissing(info); if (!databaseList.ContainsKey(sConnectionString)) { databaseList.Add(sConnectionString, info); } } } if (objProviderGuid == providerSqLite || objProviderGuid == providerSqlitePrivate) { DatabaseType dbType = DatabaseType.SQLite; var sConnectionString = DataProtection.DecryptString(connection.EncryptedConnectionString); DatabaseInfo info = new DatabaseInfo() { Caption = connection.DisplayName, FromServerExplorer = true, DatabaseType = dbType, ServerVersion = RepositoryHelper.SqliteEngineVersion, ConnectionString = sConnectionString }; info.FileIsMissing = RepositoryHelper.IsMissing(info); if (!databaseList.ContainsKey(sConnectionString)) { databaseList.Add(sConnectionString, info); } } } if (includeServerConnections && objProviderGuid == new Guid(Resources.SqlServerDotNetProvider)) { var sConnectionString = DataProtection.DecryptString(connection.EncryptedConnectionString); var info = new DatabaseInfo() { Caption = connection.DisplayName, FromServerExplorer = true, DatabaseType = DatabaseType.SQLServer, ServerVersion = string.Empty, ConnectionString = sConnectionString }; if (!databaseList.ContainsKey(sConnectionString)) { databaseList.Add(sConnectionString, info); } } } catch (KeyNotFoundException) { } catch (NullReferenceException) { } catch (ArgumentException) { } } } #if SSMS try { if (package.TelemetryVersion().Major == 140 && Properties.Settings.Default.GetObjectExplorerDatabases) { var objectExplorerManager = new ObjectExplorerManager(package); var list = objectExplorerManager.GetAllServerUserDatabases(); foreach (var item in list) { if (!databaseList.ContainsKey(item.Key)) { databaseList.Add(item.Key, item.Value); } } } } catch (MissingMethodException) { } #endif return(databaseList); }
internal void ValidateConnections(SqlCeToolboxPackage package) { var dataExplorerConnectionManager = package.GetServiceHelper(typeof(IVsDataExplorerConnectionManager)) as IVsDataExplorerConnectionManager; var removals = new List <IVsDataExplorerConnection>(); if (dataExplorerConnectionManager != null) { foreach (var connection in dataExplorerConnectionManager.Connections.Values) { try { var objProviderGuid = connection.Provider; if ( (objProviderGuid == new Guid(Resources.SqlCompact35Provider) && RepositoryHelper.IsV35Installed()) || (objProviderGuid == new Guid(Resources.SqlCompact40Provider) && RepositoryHelper.IsV40Installed()) || (objProviderGuid == new Guid(Resources.SqlCompact40PrivateProvider) && RepositoryHelper.IsV40Installed() || (objProviderGuid == new Guid(Resources.SqlitePrivateProvider) && IsSqLiteDbProviderInstalled()) )) { connection.Connection.Open(); connection.Connection.Close(); } } catch (Exception ex) { if (ex.GetType() == typeof(SQLiteException)) { removals.Add(connection); } if (ex.GetType().Name == "SqlCeException") { removals.Add(connection); } if (ex.GetType().Name == "SqlCeInvalidDatabaseFormatException") { removals.Add(connection); } if (ex.GetType() == typeof(ArgumentException)) { removals.Add(connection); } if (ex.GetType() == typeof(KeyNotFoundException)) { removals.Add(connection); } throw; } } for (int i = removals.Count - 1; i >= 0; i--) { try { dataExplorerConnectionManager.RemoveConnection(removals[i]); } catch (ArgumentException) { } catch (IndexOutOfRangeException) { } catch (KeyNotFoundException) { } } } var ownConnections = GetOwnDataConnections(); foreach (var item in ownConnections) { try { using (Helpers.RepositoryHelper.CreateRepository(item.Value)) { } } catch (Exception ex) { if (ex.GetType().Name == "SqlCeException" || ex.GetType().Name == "SqlCeInvalidDatabaseFormatException") { RemoveDataConnection(item.Value.ConnectionString); } throw; } } }
internal void ScanConnections(SqlCeToolboxPackage package) { var dte = package.GetServiceHelper(typeof(EnvDTE.DTE)) as EnvDTE.DTE; var helper = Helpers.DataConnectionHelper.CreateEngineHelper(DatabaseType.SQLCE40); EnvDTEHelper dteHelper = new EnvDTEHelper(); var list = dteHelper.GetSqlCeFilesInActiveSolution(dte); foreach (var path in list) { if (File.Exists(path)) { bool versionFound = false; SQLCEVersion version = SQLCEVersion.SQLCE20; try { version = helper.DetermineVersion(path); versionFound = true; } catch {} string connectionString = string.Format("Data Source={0}", path); if (versionFound) { if (version == SQLCEVersion.SQLCE35) { SaveDataConnection(connectionString, DatabaseType.SQLCE35, package); } else if (version == SQLCEVersion.SQLCE40) { SaveDataConnection(connectionString, DatabaseType.SQLCE40, package); } } else { var dbInfo = new DatabaseInfo(); dbInfo.DatabaseType = DatabaseType.SQLite; dbInfo.ConnectionString = connectionString; try { using (var repo = CreateRepository(dbInfo)) { repo.GetAllTableNames(); } SaveDataConnection(connectionString, DatabaseType.SQLite, package); } catch { } } } } }
internal static Dictionary<string, DatabaseInfo> GetDataConnections(SqlCeToolboxPackage package, bool includeServerConnections, bool serverConnectionsOnly) { // http://www.mztools.com/articles/2007/MZ2007018.aspx Dictionary<string, DatabaseInfo> databaseList = new Dictionary<string, DatabaseInfo>(); var dataExplorerConnectionManager = package.GetServiceHelper(typeof(IVsDataExplorerConnectionManager)) as IVsDataExplorerConnectionManager; //Test code... //var objIVsDataProviderManager = package.GetServiceHelper(typeof(IVsDataProviderManager)) as IVsDataProviderManager; //var objIVsDataConnectionManager = package.GetServiceHelper(typeof(IVsDataConnectionManager)) as IVsDataConnectionManager; //var objIVsDataSourceManager = package.GetServiceHelper(typeof(IVsDataSourceManager)) as IVsDataSourceManager; //IVsDataProvider objIVsDataProvider; //foreach (var objIVsDataSource in objIVsDataSourceManager.Sources) //{ // //System.Diagnostics.Debug.WriteLine(objIVsDataSource.DisplayName); // //System.Diagnostics.Debug.WriteLine(objIVsDataSource.Guid.ToString()); // //foreach (var objProviderGuid in objIVsDataSource.GetProviders()) // //{ // // objIVsDataProvider = objIVsDataProviderManager.GetDataProvider(objProviderGuid); // // System.Diagnostics.Debug.WriteLine(objIVsDataProvider.DisplayName); // // System.Diagnostics.Debug.WriteLine(objIVsDataProvider.Guid.ToString()); // //} //} // End test code Guid provider35 = new Guid(Resources.SqlCompact35Provider); Guid provider40 = new Guid(Resources.SqlCompact40Provider); Guid providerSQLite = new Guid(Resources.SQLiteProvider); bool isV35Installed = IsV35Installed() && DDEXProviderIsInstalled(provider35); bool isV40Installed = IsV40Installed() && DDEXProviderIsInstalled(provider40); if (dataExplorerConnectionManager != null) { foreach (var connection in dataExplorerConnectionManager.Connections.Values) { try { var objProviderGuid = connection.Provider; if (!serverConnectionsOnly) { if ((objProviderGuid == provider35 && isV35Installed) || (objProviderGuid == provider40 && isV40Installed) ) { DatabaseType dbType = DatabaseType.SQLCE40; if (objProviderGuid == provider35) dbType = DatabaseType.SQLCE35; var serverVersion = "4.0"; if (dbType == DatabaseType.SQLCE35) serverVersion = "3.5"; var sConnectionString = Microsoft.VisualStudio.Data.Services.DataProtection.DecryptString(connection.EncryptedConnectionString); if (!sConnectionString.Contains("Mobile Device")) { DatabaseInfo info = new DatabaseInfo(); info.Caption = connection.DisplayName; info.FromServerExplorer = true; info.DatabaseType = dbType; info.ServerVersion = serverVersion; info.ConnectionString = sConnectionString; info.FileIsMissing = IsMissing(info); if (!databaseList.ContainsKey(sConnectionString)) databaseList.Add(sConnectionString, info); } } if (objProviderGuid == providerSQLite) { DatabaseType dbType = DatabaseType.SQLite; var sConnectionString = Microsoft.VisualStudio.Data.Services.DataProtection.DecryptString(connection.EncryptedConnectionString); DatabaseInfo info = new DatabaseInfo(); info.Caption = connection.DisplayName; info.FromServerExplorer = true; info.DatabaseType = dbType; info.ServerVersion = "3.9"; info.ConnectionString = sConnectionString; info.FileIsMissing = IsMissing(info); if (!databaseList.ContainsKey(sConnectionString)) databaseList.Add(sConnectionString, info); } } if (includeServerConnections && objProviderGuid == new Guid(Resources.SqlServerDotNetProvider)) { var sConnectionString = Microsoft.VisualStudio.Data.Services.DataProtection.DecryptString(connection.EncryptedConnectionString); var info = new DatabaseInfo(); info.Caption = connection.DisplayName; info.FromServerExplorer = true; info.DatabaseType = DatabaseType.SQLServer; info.ServerVersion = string.Empty; info.ConnectionString = sConnectionString; if (!databaseList.ContainsKey(sConnectionString)) databaseList.Add(sConnectionString, info); } } catch (KeyNotFoundException) { continue; } catch (NullReferenceException) { continue; } } } return databaseList; }
internal static void SaveDataConnection(SqlCeToolboxPackage package, string connectionString, string testString, DatabaseType dbType, Guid provider, bool encryptedString = true) { var dataExplorerConnectionManager = package.GetServiceHelper(typeof(IVsDataExplorerConnectionManager)) as IVsDataExplorerConnectionManager; if (dataExplorerConnectionManager != null) { string savedName = GetFileName(testString, dbType); dataExplorerConnectionManager.AddConnection(savedName, provider, connectionString, encryptedString); } }
public void GenerateServerDgmlFiles(object sender, ExecutedRoutedEventArgs e) { // http://www.mztools.com/articles/2007/MZ2007011.aspx var menuItem = sender as MenuItem; if (menuItem == null) { return; } var databaseInfo = menuItem.CommandParameter as DatabaseMenuCommandParameters; if (databaseInfo == null) { return; } var originalValue = Properties.Settings.Default.KeepSchemaNames; var dte = _package.GetServiceHelper(typeof(DTE)) as DTE; try { var connectionString = databaseInfo.DatabaseInfo != null ? databaseInfo.DatabaseInfo.ConnectionString : DataConnectionHelper.PromptForConnectionString(_package); if (string.IsNullOrEmpty(connectionString)) { return; } var ptd = new PickTablesDialog(); using (var repository = Helpers.RepositoryHelper.CreateRepository(new DatabaseInfo { ConnectionString = connectionString, DatabaseType = DatabaseType.SQLServer })) { ptd.Tables = repository.GetAllTableNamesForExclusion(); } var res = ptd.ShowModal(); if (res.HasValue && res.Value) { var fd = new SaveFileDialog(); fd.Title = "Save generated DGML file as"; fd.Filter = "DGML (*.dgml)|*.dgml"; fd.OverwritePrompt = true; fd.ValidateNames = true; var result = fd.ShowDialog(); if (!result.HasValue || result.Value != true) { return; } Properties.Settings.Default.KeepSchemaNames = true; var fileName = fd.FileName; using (var repository = Helpers.RepositoryHelper.CreateRepository(new DatabaseInfo { ConnectionString = connectionString, DatabaseType = DatabaseType.SQLServer })) { try { var generator = DataConnectionHelper.CreateGenerator(repository, fileName, DatabaseType.SQLServer); generator.GenerateSchemaGraph(connectionString, ptd.Tables); if (dte != null) { dte.ItemOperations.OpenFile(fileName); dte.ActiveDocument.Activate(); } DataConnectionHelper.LogUsage("DatabasesScriptDGML"); } catch (Exception ex) { DataConnectionHelper.SendError(ex, DatabaseType.SQLServer, false); } } } } catch (Exception ex) { DataConnectionHelper.SendError(ex, DatabaseType.SQLServer, false); } finally { Properties.Settings.Default.KeepSchemaNames = originalValue; } }
public async void GenerateEfPocoFromDacPacInProject(object sender, ExecutedRoutedEventArgs e) { EnvDteHelper.LaunchUrl("https://github.com/sjh37/EntityFramework-Reverse-POCO-Code-First-Generator"); var databaseInfo = ValidateMenuInfo(sender); if (databaseInfo == null) { return; } var isEf6 = SqlCeToolboxPackage.VsSupportsEf6(); try { var dte = _package?.GetServiceHelper(typeof(DTE)) as DTE; if (dte == null) { return; } if (dte.Mode == vsIDEMode.vsIDEModeDebug) { EnvDteHelper.ShowError("Cannot generate code while debugging"); return; } var dteH = new EnvDteHelper(); var project = dteH.GetProject(dte); if (project == null) { EnvDteHelper.ShowError("Please select a project in Solution Explorer, where you want the generated code to be placed"); return; } if (dte.Solution.SolutionBuild.BuildState == vsBuildState.vsBuildStateNotStarted) { EnvDteHelper.ShowError("Please build the project before proceeding"); return; } if (isEf6) { if (!dteH.ContainsEf6Reference(project)) { EnvDteHelper.ShowError("Please add the EntityFramework 6.x NuGet package to the project"); return; } } if (!dteH.AllowedProjectKinds.Contains(new Guid(project.Kind))) { EnvDteHelper.ShowError("The selected project type does not support Entity Framework (please let me know if I am wrong)"); return; } if (project.Properties.Item("TargetFrameworkMoniker") == null) { EnvDteHelper.ShowError("The selected project type does not have a TargetFrameworkMoniker"); return; } if (!project.Properties.Item("TargetFrameworkMoniker").Value.ToString().Contains(".NETFramework")) { EnvDteHelper.ShowError("The selected project type does not support .NET Desktop - wrong TargetFrameworkMoniker: " + project.Properties.Item("TargetFrameworkMoniker").Value); return; } var ofd = new OpenFileDialog { Filter = "Dacpac (*.dacpac)|*.dacpac|All Files(*.*)|*.*", CheckFileExists = true, Multiselect = false, ValidateNames = true }; if (ofd.ShowDialog() != true) { return; } var dacPacFileName = ofd.FileName; var connectionStringBuilder = new SqlConnectionStringBuilder { DataSource = @"(localdb)\mssqllocaldb", InitialCatalog = Path.GetFileNameWithoutExtension(dacPacFileName), IntegratedSecurity = true }; var dacFxHelper = new DacFxHelper(_package); await dacFxHelper.RunDacPackageAsync(connectionStringBuilder, dacPacFileName); var prefix = "App"; var configPath = Path.Combine(Path.GetTempPath(), prefix + ".config"); var item = dteH.GetProjectConfig(project); if (item == null) { //Add app.config file to project var cfgSb = new StringBuilder(); cfgSb.AppendLine("<?xml version=\"1.0\" encoding=\"utf-8\" ?>"); cfgSb.AppendLine("<configuration>"); cfgSb.AppendLine("</configuration>"); File.WriteAllText(configPath, cfgSb.ToString(), Encoding.UTF8); item = project.ProjectItems.AddFromFileCopy(configPath); } if (item != null) { AppConfigHelper.WriteConnectionStringToAppConfig("MyDbContext", connectionStringBuilder.ConnectionString, project.FullName, "System.Data.SqlClient", prefix, item.Name); } var dte2 = (DTE2)_package.GetServiceHelper(typeof(DTE)); // ReSharper disable once SuspiciousTypeConversion.Global var solution2 = dte2.Solution as Solution2; var projectItemTemplate = solution2?.GetProjectItemTemplate("EntityFramework Reverse POCO Code First Generator", "CSharp"); if (!string.IsNullOrEmpty(projectItemTemplate)) { var projectItem = dteH.GetProjectDataContextClass(project, "Database.tt".ToLowerInvariant()); if (projectItem == null) { project.ProjectItems.AddFromTemplate(projectItemTemplate, "Database.tt"); EnvDteHelper.ShowMessage("Please run Custom Tool with the Database.tt file"); } else { EnvDteHelper.ShowMessage("Database.tt already exists, please run Custom Tool with existing Database.tt file"); } } DataConnectionHelper.LogUsage("DatabaseCreateEFPOCODacpac"); } catch (Exception ex) { if (ex.GetType() == typeof(FileNotFoundException)) { EnvDteHelper.ShowMessage("Unable to find the EF Reverse POCO Template, is it installed?"); } else { DataConnectionHelper.SendError(ex, databaseInfo.DatabaseInfo.DatabaseType, false); } } }
public void GenerateEfCoreModelInProject(object sender, ExecutedRoutedEventArgs e) { var databaseInfo = ValidateMenuInfo(sender); if (databaseInfo == null) { return; } var dbType = databaseInfo.DatabaseInfo.DatabaseType; var dte = package?.GetServiceHelper(typeof(DTE)) as DTE; if (dte == null) { return; } if (dte.Mode == vsIDEMode.vsIDEModeDebug) { EnvDteHelper.ShowError("Cannot generate code while debugging"); return; } var dteH = new EnvDteHelper(); var project = dteH.GetProject(dte); if (project == null) { EnvDteHelper.ShowError("Please select a project in Solution Explorer, where you want the EF Core Model to be placed"); return; } try { var ptd = new PickTablesDialog { IncludeTables = true }; using (var repository = DataConnectionHelper.CreateRepository(new DatabaseInfo { ConnectionString = databaseInfo.DatabaseInfo.ConnectionString, DatabaseType = databaseInfo.DatabaseInfo.DatabaseType })) { ptd.Tables = repository.GetAllTableNamesForExclusion(); } var res = ptd.ShowModal(); if (!res.HasValue || !res.Value) { return; } var revEng = new EFCoreReverseEngineer.EfCoreReverseEngineer(); var classBasis = Path.GetFileNameWithoutExtension(databaseInfo.DatabaseInfo.Caption); if (dbType == DatabaseType.SQLServer) { classBasis = new SqlConnectionStringBuilder(databaseInfo.DatabaseInfo.ConnectionString).InitialCatalog; } var model = revEng.GenerateClassName(classBasis) + "Context"; var modelDialog = new EfCoreModelDialog { ModelName = model, ProjectName = project.Name, NameSpace = project.Properties.Item("DefaultNamespace").Value.ToString() }; var result = modelDialog.ShowModal(); if (!result.HasValue || result.Value != true) { return; } var projectPath = project.Properties.Item("FullPath").Value.ToString(); var options = new ReverseEngineerOptions { UseFluentApiOnly = !modelDialog.UseDataAnnotations, ConnectionString = databaseInfo.DatabaseInfo.ConnectionString, ContextClassName = modelDialog.ModelName, DatabaseType = (EFCoreReverseEngineer.DatabaseType)dbType, ProjectPath = projectPath, OutputPath = modelDialog.OutputPath, ProjectRootNamespace = modelDialog.NameSpace, Tables = ptd.Tables }; var revEngResult = revEng.GenerateFiles(options); foreach (var filePath in revEngResult.FilePaths) { project.ProjectItems.AddFromFile(filePath); } if (revEngResult.FilePaths.Count > 0) { dte.ItemOperations.OpenFile(revEngResult.FilePaths.Last()); } ReportRevEngErrors(revEngResult, dteH.ContainsEfCoreReference(project, dbType)); DataConnectionHelper.LogUsage("DatabaseCreateEfCoreModel"); } catch (Exception ex) { DataConnectionHelper.SendError(ex, databaseInfo.DatabaseInfo.DatabaseType, false); } }
private bool TryGetInitialPath(SqlCeToolboxPackage package, out string path) { var dte = package.GetServiceHelper(typeof(EnvDTE.DTE)) as EnvDTE.DTE; EnvDTEHelper dteHelper = new EnvDTEHelper(); try { path = dteHelper.GetInitialFolder(dte); return true; } catch { path = null; return false; } }
internal static Dictionary<string, DatabaseInfo> GetDataConnections(SqlCeToolboxPackage package, bool includeServerConnections, bool serverConnectionsOnly) { // http://www.mztools.com/articles/2007/MZ2007018.aspx Dictionary<string, DatabaseInfo> databaseList = new Dictionary<string, DatabaseInfo>(); var dataExplorerConnectionManager = package.GetServiceHelper(typeof(IVsDataExplorerConnectionManager)) as IVsDataExplorerConnectionManager; //Test code... //var objIVsDataProviderManager = package.GetServiceHelper(typeof(IVsDataProviderManager)) as IVsDataProviderManager; //var objIVsDataConnectionManager = package.GetServiceHelper(typeof(IVsDataConnectionManager)) as IVsDataConnectionManager; //var objIVsDataSourceManager = package.GetServiceHelper(typeof(IVsDataSourceManager)) as IVsDataSourceManager; //IVsDataProvider objIVsDataProvider; //foreach (var objIVsDataSource in objIVsDataSourceManager.Sources) //{ // //System.Diagnostics.Debug.WriteLine(objIVsDataSource.DisplayName); // //System.Diagnostics.Debug.WriteLine(objIVsDataSource.Guid.ToString()); // //foreach (var objProviderGuid in objIVsDataSource.GetProviders()) // //{ // // objIVsDataProvider = objIVsDataProviderManager.GetDataProvider(objProviderGuid); // // System.Diagnostics.Debug.WriteLine(objIVsDataProvider.DisplayName); // // System.Diagnostics.Debug.WriteLine(objIVsDataProvider.Guid.ToString()); // //} //} // End test code Guid provider35 = new Guid(Resources.SqlCompact35Provider); Guid provider40 = new Guid(Resources.SqlCompact40Provider); Guid providerSqLite = new Guid(Resources.SQLiteProvider); bool isV35Installed = IsV35Installed() && DdexProviderIsInstalled(provider35); bool isV40Installed = IsV40Installed() && DdexProviderIsInstalled(provider40); if (dataExplorerConnectionManager != null) { foreach (var connection in dataExplorerConnectionManager.Connections.Values) { try { var objProviderGuid = connection.Provider; if (!serverConnectionsOnly) { if ((objProviderGuid == provider35 && isV35Installed) || (objProviderGuid == provider40 && isV40Installed)) { DatabaseType dbType = DatabaseType.SQLCE40; if (objProviderGuid == provider35) dbType = DatabaseType.SQLCE35; var serverVersion = "4.0"; if (dbType == DatabaseType.SQLCE35) serverVersion = "3.5"; var sConnectionString = DataProtection.DecryptString(connection.EncryptedConnectionString); if (!sConnectionString.Contains("Mobile Device")) { DatabaseInfo info = new DatabaseInfo(); info.Caption = connection.DisplayName; info.FromServerExplorer = true; info.DatabaseType = dbType; info.ServerVersion = serverVersion; info.ConnectionString = sConnectionString; info.FileIsMissing = IsMissing(info); if (!databaseList.ContainsKey(sConnectionString)) databaseList.Add(sConnectionString, info); } } if (objProviderGuid == providerSqLite) { DatabaseType dbType = DatabaseType.SQLite; var sConnectionString = DataProtection.DecryptString(connection.EncryptedConnectionString); DatabaseInfo info = new DatabaseInfo(); info.Caption = connection.DisplayName; info.FromServerExplorer = true; info.DatabaseType = dbType; //TODO Update this when SQLite provider is updated! info.ServerVersion = "3.15"; info.ConnectionString = sConnectionString; info.FileIsMissing = IsMissing(info); if (!databaseList.ContainsKey(sConnectionString)) databaseList.Add(sConnectionString, info); } } if (includeServerConnections && objProviderGuid == new Guid(Resources.SqlServerDotNetProvider)) { var sConnectionString = DataProtection.DecryptString(connection.EncryptedConnectionString); var info = new DatabaseInfo(); info.Caption = connection.DisplayName; info.FromServerExplorer = true; info.DatabaseType = DatabaseType.SQLServer; info.ServerVersion = string.Empty; info.ConnectionString = sConnectionString; if (!databaseList.ContainsKey(sConnectionString)) databaseList.Add(sConnectionString, info); } } catch (KeyNotFoundException) { } catch (NullReferenceException) { } } } #if SSMS try { var objectExplorerManager = new ObjectExplorerManager(package); var list = objectExplorerManager.GetAllServerUserDatabases(); foreach (var item in list) { if (!databaseList.ContainsKey(item.Key)) databaseList.Add(item.Key, item.Value); } } //TODO Make SSMS 14.x (17) work with above method! catch (MissingMethodException) { } #endif return databaseList; }
internal static void RemoveDataConnection(SqlCeToolboxPackage package, string connectionString, Guid provider) { var removals = new List<IVsDataExplorerConnection>(); var dataExplorerConnectionManager = package.GetServiceHelper(typeof(IVsDataExplorerConnectionManager)) as IVsDataExplorerConnectionManager; foreach (var connection in dataExplorerConnectionManager.Connections.Values) { var objProviderGuid = connection.Provider; if ((objProviderGuid == new Guid(Resources.SqlCompact35Provider)) || (objProviderGuid == new Guid(Resources.SqlCompact40Provider))) { if (Microsoft.VisualStudio.Data.Services.DataProtection.DecryptString(connection.EncryptedConnectionString) == connectionString) { removals.Add(connection); } } } for (int i = removals.Count - 1; i >= 0; i--) { try { dataExplorerConnectionManager.RemoveConnection(removals[i]); } catch (ArgumentException) { } catch (IndexOutOfRangeException) { } } }
private IObjectExplorerService GetObjectExplorer() { return(_package.GetServiceHelper(typeof(IObjectExplorerService)) as IObjectExplorerService); }
internal static Dictionary <string, DatabaseInfo> GetDataConnections(SqlCeToolboxPackage package, bool includeServerConnections, bool serverConnectionsOnly) { // http://www.mztools.com/articles/2007/MZ2007018.aspx Dictionary <string, DatabaseInfo> databaseList = new Dictionary <string, DatabaseInfo>(); var dataExplorerConnectionManager = package.GetServiceHelper(typeof(IVsDataExplorerConnectionManager)) as IVsDataExplorerConnectionManager; //Test code... //var objIVsDataProviderManager = package.GetServiceHelper(typeof(IVsDataProviderManager)) as IVsDataProviderManager; //var objIVsDataConnectionManager = package.GetServiceHelper(typeof(IVsDataConnectionManager)) as IVsDataConnectionManager; //var objIVsDataSourceManager = package.GetServiceHelper(typeof(IVsDataSourceManager)) as IVsDataSourceManager; //IVsDataProvider objIVsDataProvider; //foreach (var objIVsDataSource in objIVsDataSourceManager.Sources) //{ // //System.Diagnostics.Debug.WriteLine(objIVsDataSource.DisplayName); // //System.Diagnostics.Debug.WriteLine(objIVsDataSource.Guid.ToString()); // //foreach (var objProviderGuid in objIVsDataSource.GetProviders()) // //{ // // objIVsDataProvider = objIVsDataProviderManager.GetDataProvider(objProviderGuid); // // System.Diagnostics.Debug.WriteLine(objIVsDataProvider.DisplayName); // // System.Diagnostics.Debug.WriteLine(objIVsDataProvider.Guid.ToString()); // //} //} // End test code Guid provider35 = new Guid(Resources.SqlCompact35Provider); Guid provider40 = new Guid(Resources.SqlCompact40Provider); Guid providerSQLite = new Guid(Resources.SQLiteProvider); bool isV35Installed = IsV35Installed() && DDEXProviderIsInstalled(provider35); bool isV40Installed = IsV40Installed() && DDEXProviderIsInstalled(provider40); if (dataExplorerConnectionManager != null) { foreach (var connection in dataExplorerConnectionManager.Connections.Values) { try { var objProviderGuid = connection.Provider; if (!serverConnectionsOnly) { if ((objProviderGuid == provider35 && isV35Installed) || (objProviderGuid == provider40 && isV40Installed)) { DatabaseType dbType = DatabaseType.SQLCE40; if (objProviderGuid == provider35) { dbType = DatabaseType.SQLCE35; } var serverVersion = "4.0"; if (dbType == DatabaseType.SQLCE35) { serverVersion = "3.5"; } var sConnectionString = Microsoft.VisualStudio.Data.Services.DataProtection.DecryptString(connection.EncryptedConnectionString); if (!sConnectionString.Contains("Mobile Device")) { DatabaseInfo info = new DatabaseInfo(); info.Caption = connection.DisplayName; info.FromServerExplorer = true; info.DatabaseType = dbType; info.ServerVersion = serverVersion; info.ConnectionString = sConnectionString; info.FileIsMissing = IsMissing(info); if (!databaseList.ContainsKey(sConnectionString)) { databaseList.Add(sConnectionString, info); } } } if (objProviderGuid == providerSQLite) { DatabaseType dbType = DatabaseType.SQLite; var sConnectionString = Microsoft.VisualStudio.Data.Services.DataProtection.DecryptString(connection.EncryptedConnectionString); DatabaseInfo info = new DatabaseInfo(); info.Caption = connection.DisplayName; info.FromServerExplorer = true; info.DatabaseType = dbType; info.ServerVersion = "3.9"; info.ConnectionString = sConnectionString; info.FileIsMissing = IsMissing(info); if (!databaseList.ContainsKey(sConnectionString)) { databaseList.Add(sConnectionString, info); } } } if (includeServerConnections && objProviderGuid == new Guid(Resources.SqlServerDotNetProvider)) { var sConnectionString = Microsoft.VisualStudio.Data.Services.DataProtection.DecryptString(connection.EncryptedConnectionString); var info = new DatabaseInfo(); info.Caption = connection.DisplayName; info.FromServerExplorer = true; info.DatabaseType = DatabaseType.SQLServer; info.ServerVersion = string.Empty; info.ConnectionString = sConnectionString; if (!databaseList.ContainsKey(sConnectionString)) { databaseList.Add(sConnectionString, info); } } } catch (KeyNotFoundException) { continue; } catch (NullReferenceException) { continue; } } } return(databaseList); }
public async void GenerateEfCoreModelInProject(object sender, ExecutedRoutedEventArgs e) { var databaseInfo = ValidateMenuInfo(sender); if (databaseInfo == null) { return; } var dbType = databaseInfo.DatabaseInfo.DatabaseType; var dte = package?.GetServiceHelper(typeof(DTE)) as DTE; if (dte == null) { return; } if (dte.Mode == vsIDEMode.vsIDEModeDebug) { EnvDteHelper.ShowError("Cannot generate code while debugging"); return; } var dteH = new EnvDteHelper(); var project = dteH.GetProject(dte); if (project == null) { EnvDteHelper.ShowError("Please select a project in Solution Explorer, where you want the EF Core Model to be placed"); return; } try { var ptd = new PickTablesDialog { IncludeTables = true }; using (var repository = Helpers.RepositoryHelper.CreateRepository(new DatabaseInfo { ConnectionString = databaseInfo.DatabaseInfo.ConnectionString, DatabaseType = databaseInfo.DatabaseInfo.DatabaseType })) { ptd.Tables = repository.GetAllTableNamesForExclusion(); } var res = ptd.ShowModal(); if (!res.HasValue || !res.Value) { return; } var revEng = new EfCoreReverseEngineer(); var classBasis = Helpers.RepositoryHelper.GetClassBasis(databaseInfo.DatabaseInfo.ConnectionString, dbType); var model = revEng.GenerateClassName(classBasis) + "Context"; var packageResult = dteH.ContainsEfCoreReference(project, dbType); var modelDialog = new EfCoreModelDialog { InstallNuGetPackage = !packageResult.Item1, ModelName = model, ProjectName = project.Name, NameSpace = project.Properties.Item("DefaultNamespace").Value.ToString() }; var result = modelDialog.ShowModal(); if (!result.HasValue || result.Value != true) { return; } var projectPath = project.Properties.Item("FullPath").Value.ToString(); var options = new ReverseEngineerOptions { UseFluentApiOnly = !modelDialog.UseDataAnnotations, ConnectionString = databaseInfo.DatabaseInfo.ConnectionString, ContextClassName = modelDialog.ModelName, DatabaseType = (EFCoreReverseEngineer.DatabaseType)dbType, ProjectPath = projectPath, OutputPath = modelDialog.OutputPath, ProjectRootNamespace = modelDialog.NameSpace, Tables = ptd.Tables }; var revEngResult = revEng.GenerateFiles(options); if (modelDialog.SelectedTobeGenerated == 0 || modelDialog.SelectedTobeGenerated == 2) { foreach (var filePath in revEngResult.EntityTypeFilePaths) { project.ProjectItems.AddFromFile(filePath); } } if (modelDialog.SelectedTobeGenerated == 0 || modelDialog.SelectedTobeGenerated == 1) { project.ProjectItems.AddFromFile(revEngResult.ContextFilePath); dte.ItemOperations.OpenFile(revEngResult.ContextFilePath); } packageResult = dteH.ContainsEfCoreReference(project, dbType); var missingProviderPackage = packageResult.Item1 ? null : packageResult.Item2; if (modelDialog.InstallNuGetPackage) { missingProviderPackage = null; } ReportRevEngErrors(revEngResult, missingProviderPackage); if (modelDialog.InstallNuGetPackage) { package.SetStatus("Installing EF Core provider package"); var nuGetHelper = new NuGetHelper(); await nuGetHelper.InstallPackageAsync(packageResult.Item2, project); } DataConnectionHelper.LogUsage("DatabaseCreateEfCoreModel"); } catch (Exception ex) { package.SetStatus(null); DataConnectionHelper.SendError(ex, databaseInfo.DatabaseInfo.DatabaseType, false); } }
internal void ValidateConnections(SqlCeToolboxPackage package) { var dataExplorerConnectionManager = package.GetServiceHelper(typeof(IVsDataExplorerConnectionManager)) as IVsDataExplorerConnectionManager; var removals = new List<IVsDataExplorerConnection>(); foreach (var connection in dataExplorerConnectionManager.Connections.Values) { try { var objProviderGuid = connection.Provider; if ((objProviderGuid == new Guid (Resources.SqlCompact35Provider) && IsV35Installed()) || (objProviderGuid == new Guid (Resources.SqlCompact40Provider) && IsV40Installed())) { connection.Connection.Open(); connection.Connection.Close(); } } catch (Exception ex) { if (ex.GetType().Name == "SqlCeException") { removals.Add(connection); } if (ex.GetType() == typeof(ArgumentException)) { removals.Add(connection); } if (ex.GetType() == typeof(KeyNotFoundException)) { removals.Add(connection); } throw; } } for (int i = removals.Count - 1; i >= 0; i--) { try { dataExplorerConnectionManager.RemoveConnection(removals[i]); } catch (ArgumentException) { } catch (IndexOutOfRangeException) { } catch (KeyNotFoundException) { } } var ownConnections = GetOwnDataConnections(); foreach (var item in ownConnections) { try { using (var test = CreateRepository(item.Value)) { } } catch (Exception ex) { if (ex.GetType().Name == "SqlCeException") { System.Diagnostics.Debug.WriteLine(ex.Message); RemoveDataConnection(item.Value.ConnectionString); } throw; } } }