public static T ExecuteItem <T>(this IGetProvider <T> message) where T : class, IId, IProviderId, new()
        {
            using (var context = DataContext.CreateForMessage(message))
            {
                T entity = context.Set <T>().Where(x => x.Id == message.Id && x.ProviderId == message.ProviderId).SingleOrDefault();

                return(entity);
            }
        }
        public static R ExecuteItem <T, R>(this IGetProvider <T, R> message)
            where T : class, IId, IProviderId
            where R : class, new()
        {
            using (var context = DataContext.CreateForMessage(message))
            {
                // Step 1. Get the entity
                T entity = context.Set <T>().Where(x => x.Id == message.Id && x.ProviderId == message.ProviderId).SingleOrDefault();

                // Step 2. Return null if not found
                if (entity == null)
                {
                    return(null);
                }

                // Step 3. Create result
                R result = new R();

                // Step 4. Set values
                result.InjectFrom <CommonValueInjection>(entity);

                return(result);
            }
        }