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