コード例 #1
0
ファイル: Program.cs プロジェクト: frotaru/EFSqlTranslator
        private static ReadMeTranslationEntry GetTranslationEntry(MyFirstTarget consoleTarget, MethodBase methodInfo,
                                                                  Type type)
        {
            var tAttr = methodInfo.GetCustomAttribute <TranslationReadMeAttribute>();

            if (tAttr == null)
            {
                return(null);
            }

            var test = Activator.CreateInstance(type);

            methodInfo.Invoke(test, new object[0]);

            var record = consoleTarget.Records.OfType <Tuple <Expression, string> >().Single();

            consoleTarget.Records.Clear();

            var expression = record.Item1;
            var sql        = record.Item2;

            var expStr = expression.ToReadableString();

            expStr = QueryableNameRegex.Replace(expStr, @"db.$1s");
            expStr = SingleLineCommentsRegex.Replace(expStr, "");

            return(new ReadMeTranslationEntry
            {
                TranslationAttr = tAttr,
                ExpressionString = expStr,
                Sql = sql
            });
        }
コード例 #2
0
ファイル: Program.cs プロジェクト: frotaru/EFSqlTranslator
        public static void Main(string[] args)
        {
            var config = new LoggingConfiguration();

            // Step 2. Create targets and add them to the configuration
            var consoleTarget = new MyFirstTarget();

            config.AddTarget(nameof(QueryTranslator), consoleTarget);

            // Step 3. Set target properties
            consoleTarget.Layout = @"${date:format=HH\:mm\:ss} ${logger} ${message}";

            // Step 4. Define rules
            var rule1 = new LoggingRule("*", LogLevel.Debug, consoleTarget);

            config.LoggingRules.Add(rule1);

            // Step 5. Activate the configuration
            LogManager.Configuration = config;

            var categories = GetCategories(consoleTarget);

            const string path = @"../README.md";

            if (File.Exists(path))
            {
                File.Delete(path);
            }

            using (var fs = new FileStream(path, FileMode.OpenOrCreate))
                using (var sw = new StreamWriter(fs))
                {
                    sw.WriteLine(Beginning);
                    sw.WriteLine();

                    foreach (var category in categories)
                    {
                        category.WriteTo(sw);
                    }

                    sw.WriteLine();
                    sw.WriteLine(Ending);
                }
        }
コード例 #3
0
ファイル: Program.cs プロジェクト: frotaru/EFSqlTranslator
        private static IEnumerable <ReadMeCategory> GetCategories(MyFirstTarget consoleTarget)
        {
            var assambly = Assembly.Load(new AssemblyName("EFSqlTranslator.Tests"));
            var classes  = assambly.GetTypes();

            var categories = new SortedSet <ReadMeCategory>(ReadMeCategory.Comparer);

            foreach (var type in classes)
            {
                var typeInfo = type.GetTypeInfo();
                var cAttr    = typeInfo.GetCustomAttribute <CategoryReadMeAttribute>();
                if (cAttr == null)
                {
                    continue;
                }

                var category = new ReadMeCategory
                {
                    CategoryAttr = cAttr
                };

                categories.Add(category);

                var methods = type.GetMethods();
                foreach (var methodInfo in methods)
                {
                    var translationEntry = GetTranslationEntry(consoleTarget, methodInfo, type);
                    if (translationEntry == null)
                    {
                        continue;
                    }

                    category.Entries.Add(translationEntry);
                }
            }

            return(categories);
        }