示例#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
 public SqlFactory(DbModel dbModel)
 {
     _dbModel        = dbModel;
     _driver         = _dbModel.Driver;
     _sqlCache       = new SqlCache(10000);
     _linqEngine     = new LinqEngine(_dbModel);
     _crudSqlBuilder = _dbModel.Driver.CreateCrudSqlBuilder(_dbModel);
 }