protected override SqlExpression GetInsertIdentityExpression(MetaDataMember member) { var exp = new SqlVariable(member.Type, typeProvider.From(member.Type), "NEXTVAL FOR " + DB2Builder.GetSequenceName(member, translator.Provider.SqlIdentifier), dominatingExpression); return(exp); }
void IProvider.CreateDatabase() { if (DatabaseExists()) { throw SqlClient.Error.CreateDatabaseFailedBecauseSqlCEDatabaseAlreadyExists(dbName); } //创建数据库文件 var connection = new DB2Connection(GetConnectionString(null)); connection.Open(); var sqlBuilder = new DB2Builder(this); var transaction = connection.BeginTransaction(); Execute(connection, transaction, sqlBuilder.GetCreateDatabaseCommand(dbName, null)); try { MetaModel model = services.Model; foreach (MetaTable table in model.GetTables()) { string createTableCommand = sqlBuilder.GetCreateTableCommand(table); if (!string.IsNullOrEmpty(createTableCommand)) { Execute(connection, transaction, createTableCommand); } } foreach (MetaTable table in model.GetTables()) { foreach (string commandText in sqlBuilder.GetCreateForeignKeyCommands(table)) { if (!string.IsNullOrEmpty(commandText)) { Execute(connection, transaction, commandText); } } } transaction.Commit(); } catch { transaction.Rollback(); throw; } finally { connection.Close(); } }
protected override SqlExpression GetReturnIdentityExpression(MetaDataMember idMember, bool isOutputFromInsert) { var name = "PREVVAL FOR " + DB2Builder.GetSequenceName(idMember, translator.Provider.SqlIdentifier) + " FROM " + idMember.DeclaringType.Table.TableName;//OracleSqlBuilder.GetSequenceName(idMember, translator.Provider.SqlIdentifier) + ".CURRVAL"; return(new SqlVariable(idMember.Type, typeProvider.From(idMember.Type), name, this.dominatingExpression)); }