コード例 #1
0
        private void CompileViews()
        {
            if (!_dbModel.Driver.Supports(DbFeatures.Views))
            {
                return;
            }
            var views = _dbModel.Tables.Where(t => t.Kind == EntityKind.View).ToList();

            if (views.Count == 0)
            {
                return;
            }
            // create dummy session, needed for LINQ translation
            var dummySession = new EntitySession(new OperationContext(this._entityModel.App), EntitySessionKind.Dummy);
            var engine       = new LinqEngine(_dbModel);
            var emptyList    = new List <string>();

            foreach (var viewTbl in views)
            {
                var entInfo = viewTbl.Entity;
                var expr    = entInfo.ViewDefinition.Query.Expression;
                var viewCmd = new DynamicLinqCommand(dummySession, expr, LinqCommandKind.View, LinqOperation.Select);
                LinqCommandRewriter.RewriteToLambda(viewCmd);
                var sql        = engine.TranslateSelect(viewCmd);
                var cmdBuilder = new DataCommandBuilder(_driver, mode: SqlGenMode.NoParameters);
                //there might be some local values that are transformed into params. But they will be replaced with literals
                // when generating final SQL
                cmdBuilder.AddLinqStatement(sql, viewCmd.ParamValues);
                viewTbl.ViewSql = cmdBuilder.GetSqlText();
            }
        }
コード例 #2
0
ファイル: SqlFactory.cs プロジェクト: radtek/vita
        // Insert-many are never cached - these are custom-built each time
        public SqlStatement  GetCrudInsertMany(DbTableInfo table, IList <EntityRecord> records, DataCommandBuilder commandBuilder)
        {
            var sql = _crudSqlBuilder.BuildCrudInsertMany(table, records, commandBuilder); //commandBuilder is ICommandValueFormatter

            _driver.SqlDialect.ReviewSqlStatement(sql, table);
            return(sql);
        }