/// <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());
        }
Exemple #2
0
        /// <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);
        }