void IProviderExtend.CreateForeignKeys(MetaTable metaTable) { var sqlBuilder = new AccessDbSqlBuilder(this); var commands = sqlBuilder.GetCreateForeignKeyCommands(metaTable); foreach (var command in commands) { services.Context.ExecuteCommand(command); } }
void IProviderExtend.DeleteTable(MetaTable metaTable) { var commands = new AccessDbSqlBuilder(this).GetDropTableCommands(metaTable); foreach (var command in commands) { Debug.Assert(!string.IsNullOrEmpty(command)); services.Context.ExecuteCommand(command); } }
void IProviderExtend.CreateTable(MetaTable metaTable) { //var metaTable = services.Model.GetTable(metaTable); var sqlBuilder = new AccessDbSqlBuilder(this); var commands = sqlBuilder.GetCreateTableCommands(metaTable); //services.Context.ExecuteCommand(command); foreach (var command in commands) { Debug.Assert(command != null); services.Context.ExecuteCommand(command); } }
void IProvider.CreateDatabase() { if (File.Exists(dbName)) { throw SqlClient.Error.CreateDatabaseFailedBecauseSqlCEDatabaseAlreadyExists(dbName); } //创建数据库文件 var dbEngineClass = new DBEngineClass(); var dataBase = dbEngineClass.CreateDatabase(dbName, LanguageConstants.dbLangGeneral, DatabaseTypeEnum.dbEncrypt); dataBase.Close(); var connection = new OleDbConnection(GetConnectionString(dbName)); connection.Open(); var transaction = connection.BeginTransaction(); var AccessDbSqlBuilder = new AccessDbSqlBuilder(this); try { if (services.Model.GetTables().FirstOrDefault() == null) { throw SqlClient.Error.CreateDatabaseFailedBecauseOfContextWithNoTables(services.Model.DatabaseName); } var model = services.Model; foreach (var table in model.GetTables()) { //string createTableCommand = AccessDbSqlBuilder.GetCreateTableCommand(table); //if (!string.IsNullOrEmpty(createTableCommand)) // Execute(connection, transaction, createTableCommand); var commands = AccessDbSqlBuilder.GetCreateTableCommands(table); foreach (var command in commands) { Debug.Assert(command != null); Execute(connection, transaction, command); } } foreach (MetaTable table in model.GetTables()) { foreach (string commandText in AccessDbSqlBuilder.GetCreateForeignKeyCommands(table)) { if (!string.IsNullOrEmpty(commandText)) { Execute(connection, transaction, commandText); } } } transaction.Commit(); } catch { transaction.Rollback(); throw; } finally { connection.Close(); } }