private static object GetValue(string name, DbType dbType, ICriterion criterion, IContext context)
        {
            object o = null;

            if (criterion != null)
            {
                try
                {
                    switch (dbType)
                    {
                    case DbType.AnsiString:
                        break;

                    case DbType.AnsiStringFixedLength:
                        break;

                    case DbType.Binary:
                        break;

                    case DbType.Boolean:
                        o = criterion.GetValue <bool>(name);
                        break;

                    case DbType.Byte:
                        break;

                    case DbType.Currency:
                        break;

                    case DbType.Date:
                    case DbType.DateTime:
                    case DbType.DateTime2:
                    case DbType.DateTimeOffset:
                        o = criterion.GetValue <DateTime>(name);
                        break;

                    case DbType.Decimal:
                        o = criterion.GetValue <decimal>(name);
                        break;

                    case DbType.Double:
                        o = criterion.GetValue <double>(name);
                        break;

                    case DbType.Guid:
                        o = criterion.GetValue <Guid>(name);
                        break;

                    case DbType.Int16:
                        o = criterion.GetValue <Int16>(name);
                        break;

                    case DbType.Int32:
                        o = criterion.GetValue <Int32>(name);
                        break;

                    case DbType.Int64:
                        o = criterion.GetValue <Int64>(name);
                        break;

                    case DbType.Object:
                        break;

                    case DbType.SByte:
                        break;

                    case DbType.Single:
                        break;

                    case DbType.String:
                        o = criterion.GetValue <string>(name);
                        break;

                    case DbType.StringFixedLength:
                        o = criterion.GetValue <string>(name);
                        break;

                    case DbType.Time:
                        break;

                    case DbType.UInt16:
                        break;

                    case DbType.UInt32:
                        break;

                    case DbType.UInt64:
                        break;

                    case DbType.VarNumeric:
                        break;

                    case DbType.Xml:
                        break;

                    default:
                        break;
                    }
                }
                catch (Exception ex)
                {
                    string message = ex.InnerException != null ? ex.InnerException.Message : ex.Message;
                    var    props   = eXtensibleConfig.GetProperties();
                    context.SetError(500, message);
                    EventWriter.WriteError(message, SeverityType.Error, "DataAccess", props);
                }
            }
            return(o);
        }
        void IModelDataGatewayInitializeable.Initialize <T>(ModelActionOption option, IContext context, T t, ICriterion criterion, ResolveDbKey <T> dbkeyResolver)
        {
            string connectionStringKey = ResolveConnectionStringKey(context);

            if (String.IsNullOrWhiteSpace(connectionStringKey))
            {
                connectionStringKey = dbkeyResolver.Invoke(context);
            }
            if (String.IsNullOrEmpty(connectionStringKey))
            {
                int connectionStringCount = ConfigurationProvider.ConnectionStrings.Count;
                if (connectionStringCount > 0)
                {
                    var found = ConfigurationProvider.ConnectionStrings[connectionStringCount - 1];
                    connectionStringKey = found.Name;
                    if (eXtensibleConfig.Inform)
                    {
                        EventWriter.Inform(String.Format("Could not resolve the database key, selecting a connection string from configuration (key={0})", found.Name));
                    }
                }
            }
            if (String.IsNullOrEmpty(connectionStringKey))
            {
                var message = Exceptions.ComposeDbConnectionStringKeyResolutionError <T>(option, t, context);
                context.SetError(500, message.ToPublish());
                EventWriter.WriteError(message.ToLog(), SeverityType.Error, XFConstants.Category.DataAccess, context.ToDictionary(message.Id));
            }
            else
            {
                ConnectionStringSettings settings = ConfigurationProvider.ConnectionStrings[connectionStringKey];
                if (settings == null)
                {
                    var message = Exceptions.ComposeDbConnectionNullSettingsError <T>(option, t, context, connectionStringKey);
                    context.SetError(500, message.ToPublish());
                    EventWriter.WriteError(message.ToLog(), SeverityType.Error, XFConstants.Category.DataAccess, context.ToDictionary(message.Id));
                }
                else
                {
                    SqlConnection connection = null;
                    try
                    {
                        connection = new SqlConnection(settings.ConnectionString);
                    }
                    catch (Exception ex)
                    {
                        var message = Exceptions.ComposeDbConnectionStringFormatError <T>(option, t, context, connectionStringKey, settings.ConnectionString);
                        context.SetError(500, message.ToPublish());
                        context.SetStacktrace(ex.StackTrace);
                        EventWriter.WriteError(message.ToLog(), SeverityType.Error, XFConstants.Category.DataAccess, context.ToDictionary(message.Id));
                    }
                    if (connection == null)
                    {
                        var message = Exceptions.ComposeDbConnectionCreationError <T>(option, t, context, connectionStringKey);
                        context.SetError(500, message.ToPublish());
                        EventWriter.WriteError(message.ToLog(), SeverityType.Error, XFConstants.Category.DataAccess, context.ToDictionary(message.Id));
                    }
                    else
                    {
                        DbConnection = connection;
                        if (eXtensibleConfig.CaptureMetrics)
                        {
                            IRequestContext ctx = context as IRequestContext;
                            ctx.SetMetric(XFConstants.Metrics.Scope.DataStore, XFConstants.Metrics.Database.Datasource, String.Format("server:{0};database:{1};", connection.DataSource, connection.Database));
                        }
                    }
                }
            }
        }
        public virtual DataSet ExecuteCommand(DataSet dataSet, ICriterion criterion, IContext context)
        {
            DataSet ds = new DataSet()
            {
                DataSetName = "DataSet"
            };

            if (DbConnection != null)
            {
                IRequestContext        ctx      = context as IRequestContext;
                ISqlCommandContext <T> resolver = (ISqlCommandContext <T>) this;
                SqlCommand             cmd      = null;

                using (SqlConnection cn = DbConnection)
                {
                    try
                    {
                        cn.Open();
                        cmd = ExecuteCommandSqlCommand(cn, dataSet, criterion, context);
                        if (cmd != null)
                        {
                            if (eXtensibleConfig.CaptureMetrics)
                            {
                                ctx.SetMetric(cmd.CommandType.ToString(), XFConstants.Metrics.Database.Command, cmd.CommandText);
                                ctx.SetMetric(XFConstants.Metrics.Scope.DataStore, XFConstants.Metrics.Scope.Command.Begin, DateTime.Now);
                            }
                            using (SqlDataAdapter adapter = new SqlDataAdapter(cmd))
                            {
                                try
                                {
                                    adapter.Fill(ds);
                                }
                                catch (Exception ex)
                                {
                                    string s       = cn.ConnectionString;
                                    var    message = Exceptions.ComposeBorrowReaderError <T>(ModelActionOption.GetAll, ex, null, criterion, context, this.GetType().FullName);
                                    context.SetError(500, message.ToPublish());
                                    context.SetStacktrace(ex.StackTrace);
                                    EventWriter.WriteError(message.ToLog(), SeverityType.Error, XFConstants.Category.DataAccess, context.ToDictionary(message.Id));
                                }
                            }

                            if (eXtensibleConfig.CaptureMetrics)
                            {
                                ctx.SetMetric(XFConstants.Metrics.Scope.DataStore, XFConstants.Metrics.Scope.Command.End, DateTime.Now);
                            }
                        }
                        else
                        {
                            var message = Exceptions.ComposeNullSqlCommand <T>(ModelActionOption.GetAll, null, criterion, context, this.GetType().FullName);
                            context.SetError(500, message.ToPublish());
                            EventWriter.WriteError(message.ToLog(), SeverityType.Error, XFConstants.Category.DataAccess, context.ToDictionary(message.Id));
                        }
                    }
                    catch (Exception ex)
                    {
                        if (eXtensibleConfig.CaptureMetrics)
                        {
                            ctx.SetMetric(XFConstants.Metrics.Scope.DataStore, XFConstants.Metrics.Scope.Command.End, DateTime.Now);
                        }
                        string database = String.Format("server:{0};database:{1}", cn.DataSource, cn.Database);
                        var    message  = Exceptions.ComposeSqlException <T>(ModelActionOption.GetAll, ex, null, criterion, context, this.GetType().FullName, database);
                        context.SetError(500, message.ToPublish());
                        context.SetStacktrace(ex.StackTrace);
                        EventWriter.WriteError(message.ToLog(), SeverityType.Error, XFConstants.Category.DataAccess, context.ToDictionary(message.Id));
                    }
                }
            }


            return(ds);
        }
        public virtual IEnumerable <Projection> GetAllProjections(ICriterion criterion, IContext context)
        {
            List <Projection> list = new List <Projection>();

            if (DbConnection != null)
            {
                IRequestContext ctx = context as IRequestContext;
                SqlCommand      cmd = null;

                using (SqlConnection cn = DbConnection)
                {
                    try
                    {
                        cn.Open();
                        cmd = GetAllProjectionsSqlCommand(cn, criterion, context);

                        if (cmd != null)
                        {
                            if (eXtensibleConfig.CaptureMetrics)
                            {
                                ctx.SetMetric(cmd.CommandType.ToString(), XFConstants.Metrics.Database.Command, cmd.CommandText);
                                ctx.SetMetric(XFConstants.Metrics.Scope.DataStore, XFConstants.Metrics.Scope.Command.Begin, DateTime.Now);
                            }
                            using (SqlDataReader reader = cmd.ExecuteReader())
                            {
                                try
                                {
                                    BorrowReaderProjections(reader, list);
                                }
                                catch (Exception ex)
                                {
                                    var message = Exceptions.ComposeBorrowReaderError <T>(ModelActionOption.GetAllProjections, ex, null, criterion, context, this.GetType().FullName);
                                    context.SetError(500, message.ToPublish());
                                    context.SetStacktrace(ex.StackTrace);
                                    EventWriter.WriteError(message.ToLog(), SeverityType.Error, XFConstants.Category.DataAccess, context.ToDictionary(message.Id));
                                }
                            }
                            if (eXtensibleConfig.CaptureMetrics)
                            {
                                ctx.SetMetric(XFConstants.Metrics.Scope.DataStore, XFConstants.Metrics.Scope.Command.End, DateTime.Now);
                                ctx.SetMetric(XFConstants.Metrics.Scope.DataStore, XFConstants.Metrics.Count, list.Count);
                            }
                        }
                        else
                        {
                            var message = Exceptions.ComposeNullSqlCommand <T>(ModelActionOption.GetAllProjections, null, criterion, context, this.GetType().FullName);
                            context.SetError(500, message.ToPublish());
                            EventWriter.WriteError(message.ToLog(), SeverityType.Error, XFConstants.Category.DataAccess, context.ToDictionary(message.Id));
                        }
                    }
                    catch (Exception ex)
                    {
                        if (eXtensibleConfig.CaptureMetrics)
                        {
                            ctx.SetMetric(XFConstants.Metrics.Scope.DataStore, XFConstants.Metrics.Scope.Command.End, DateTime.Now);
                        }
                        string database = String.Format("server:{0};database:{1}", cn.DataSource, cn.Database);
                        var    message  = Exceptions.ComposeSqlException <T>(ModelActionOption.GetAllProjections, ex, null, criterion, context, this.GetType().FullName, database);
                        context.SetError(500, message.ToPublish());
                        context.SetStacktrace(ex.StackTrace);
                        EventWriter.WriteError(message.ToLog(), SeverityType.Error);
                    }
                }
            }


            return(list);
        }
        public virtual ICriterion Delete(ICriterion criterion, IContext context)
        {
            Criterion item = new Criterion();

            if (criterion != null)
            {
                if (DbConnection != null)
                {
                    IRequestContext ctx = context as IRequestContext;
                    //ISqlCommandContext<T> resolver = (ISqlCommandContext<T>)this;
                    SqlCommand cmd = null;
                    int        i   = 0;
                    using (SqlConnection cn = DbConnection)
                    {
                        try
                        {
                            cn.Open();
                            cmd = DeleteSqlCommand(cn, criterion, context);

                            if (cmd != null)
                            {
                                if (eXtensibleConfig.CaptureMetrics)
                                {
                                    ctx.SetMetric(cmd.CommandType.ToString(), XFConstants.Metrics.Database.Command, cmd.CommandText);
                                    ctx.SetMetric(XFConstants.Metrics.Scope.DataStore, XFConstants.Metrics.Scope.Command.Begin, DateTime.Now);
                                }
                                i = cmd.ExecuteNonQuery();
                                bool b = (i == 1) ? true : false;
                                item.AddItem("Success", b);
                                if (eXtensibleConfig.CaptureMetrics)
                                {
                                    ctx.SetMetric(XFConstants.Metrics.Scope.DataStore, XFConstants.Metrics.Scope.Command.End, DateTime.Now);
                                    ctx.SetMetric(XFConstants.Metrics.Scope.DataStore, XFConstants.Metrics.Count, i);
                                }
                            }
                            else
                            {
                                var message = Exceptions.ComposeNullSqlCommand <T>(ModelActionOption.Delete, null, criterion, context, this.GetType().FullName);
                                context.SetError(500, message.ToPublish());
                                EventWriter.WriteError(message.ToLog(), SeverityType.Error, XFConstants.Category.DataAccess, context.ToDictionary(message.Id));
                            }
                        }
                        catch (Exception ex)
                        {
                            if (eXtensibleConfig.CaptureMetrics)
                            {
                                ctx.SetMetric(XFConstants.Metrics.Scope.DataStore, XFConstants.Metrics.Scope.Command.End, DateTime.Now);
                            }
                            string database = String.Format("server:{0};database:{1}", cn.DataSource, cn.Database);
                            var    message  = Exceptions.ComposeSqlException <T>(ModelActionOption.Delete, ex, null, criterion, context, this.GetType().FullName, database);
                            context.SetError(500, message.ToPublish());
                            context.SetStacktrace(ex.StackTrace);
                            EventWriter.WriteError(message.ToLog(), SeverityType.Error, XFConstants.Category.DataAccess, context.ToDictionary(message.Id));
                        }
                    }
                }
            }
            else if (eXtensibleConfig.Inform)
            {
                EventWriter.Inform(String.Format("No criterion was provided for {0}.Delete method in {1}", GetModelType().FullName, this.GetType().FullName));
            }

            return(item);
        }
示例#6
0
        public bool Load(out T t, IEnumerable <string> folderpaths)
        {
            bool b = false;

            t = new T();
            using (AggregateCatalog catalog = new AggregateCatalog())
            {
                AddCatalogs(catalog, folderpaths);
                AddTypes(catalog);

                using (CompositionContainer container = new CompositionContainer(catalog, true))
                {
                    try
                    {
                        container.ComposeParts(t);
                        b = true;
                        if (eXtensibleConfig.Inform)
                        {
                            EventWriter.Inform("TypeCache loaded successfully");
                        }
                    }
                    catch (System.IO.FileLoadException fileEx)
                    {
                        string message = (fileEx.InnerException != null) ? fileEx.InnerException.Message : fileEx.Message;
                        EventWriter.WriteError(message, SeverityType.Critical);
                        if (eXtensibleConfig.Inform)
                        {
                            EventWriter.Inform(message);
                        }
                    }
                    catch (System.TypeLoadException loadEx)
                    {
                        string message = (loadEx.InnerException != null) ? loadEx.InnerException.Message : loadEx.Message;
                        EventWriter.WriteError(message, SeverityType.Critical);
                        if (eXtensibleConfig.Inform)
                        {
                            EventWriter.Inform(message);
                        }
                    }
                    catch (ReflectionTypeLoadException reflexEx)
                    {
                        StringBuilder sb = new StringBuilder();
                        foreach (var item in reflexEx.LoaderExceptions)
                        {
                            sb.AppendLine(item.Message);
                        }
                        EventWriter.WriteError(sb.ToString(), SeverityType.Critical);
                        if (eXtensibleConfig.Inform)
                        {
                            EventWriter.Inform(sb.ToString());
                        }
                    }
                    catch (Exception ex)
                    {
                        string message = (ex.InnerException != null) ? ex.InnerException.Message : ex.Message;
                        EventWriter.WriteError(message, SeverityType.Critical);
                        if (eXtensibleConfig.Inform)
                        {
                            EventWriter.Inform(message);
                        }
                    }
                }
            }
            return(b);
        }