/// <summary> /// Get applicable data features that can be deployed /// </summary> public IEnumerable <IDataFeature> GetFeatures(ConnectionString connectionString) { // Get all embedded data features var provider = this.GetProvider(connectionString); using (var conn = provider.GetReadonlyConnection()) return(SqlFeatureUtil.GetFeatures(this.Invariant).Where(f => { try { var checkSql = f.GetCheckSql(); if (!String.IsNullOrEmpty(checkSql)) { using (var cmd = conn.Connection.CreateCommand()) { cmd.CommandText = checkSql; cmd.CommandType = System.Data.CommandType.Text; return (bool)cmd.ExecuteScalar(); } } return false; } catch (Exception e) { Trace.TraceError("Error executing pre-check {0}: {1}", f.Name, e); return false; } }).ToArray()); }
/// <summary> /// Create the installation tasks /// </summary> public override IEnumerable <IConfigurationTask> CreateInstallTasks() { // Add installation tasks List <IConfigurationTask> retVal = new List <IConfigurationTask>(base.CreateInstallTasks()); var conf = this.Configuration as OrmConfigurationBase; foreach (var feature in SqlFeatureUtil.GetFeatures(conf.Provider.Invariant).OfType <SqlFeature>().Where(o => o.Scope == "SanteDB.Persistence.Data.ADO").OrderBy(o => o.Id)) { try { retVal.Add(new SqlMigrationTask(this, feature)); } catch { // Not allowed to be installed } } return(retVal); }