Beispiel #1
0
        static void Test(EJ.Databases dbconfig)
        {
            IDatabaseDesignService dbservice = EntityDB.Design.DBHelper.CreateDatabaseDesignService((EntityDB.DatabaseType)(int) dbconfig.dbType);

            EntityDB.IDatabaseService db = null;
            dbservice.Drop(dbconfig);
            try
            {
                dbservice.Create(dbconfig);
                db = EntityDB.DBContext.CreateDatabaseService(dbconfig.conStr, (EntityDB.DatabaseType)(int) dbconfig.dbType);

                List <EJ.DBColumn> allColumns = new List <EJ.DBColumn>();
                List <EntityDB.Design.IndexInfo> allindexes = new List <EntityDB.Design.IndexInfo>();

                #region CreateTable
                if (true)
                {
                    EJ.DBTable tableUser = new EJ.DBTable();
                    tableUser.Name = "User";

                    allColumns.Add(new EJ.DBColumn()
                    {
                        IsPKID          = true,
                        CanNull         = false,
                        Name            = "Id",
                        dbType          = "int",
                        IsAutoIncrement = true,
                    });
                    allColumns.Add(new EJ.DBColumn()
                    {
                        Name         = "Name",
                        dbType       = "varchar",
                        length       = "50",
                        defaultValue = "a'b,c"
                    });

                    CreateTableAction _CreateTableAction = new CreateTableAction(tableUser, allColumns.ToArray(), allindexes.ToArray());
                    _CreateTableAction.Invoke(db);

                    DeleteTableAction _delaction = new DeleteTableAction(tableUser.Name);
                    _delaction.Invoke(db);

                    //再次创建
                    _CreateTableAction.Invoke(db);
                }
                #endregion

                allColumns.Clear();
                allindexes.Clear();
                allColumns.Add(new EJ.DBColumn()
                {
                    IsPKID          = true,
                    CanNull         = false,
                    Name            = "Id",
                    dbType          = "int",
                    IsAutoIncrement = true,
                });
                allColumns.Add(new EJ.DBColumn()
                {
                    Name         = "C1",
                    dbType       = "varchar",
                    length       = "50",
                    defaultValue = "a'b,c"
                });
                allColumns.Add(new EJ.DBColumn()
                {
                    Name         = "C2",
                    dbType       = "varchar",
                    length       = "50",
                    defaultValue = "abc"
                });
                allColumns.Add(new EJ.DBColumn()
                {
                    Name         = "C3",
                    dbType       = "int",
                    defaultValue = "8"
                });
                allColumns.Add(new EJ.DBColumn()
                {
                    Name   = "Text1",
                    dbType = "text",
                });
                //索引
                allindexes.Add(new EntityDB.Design.IndexInfo()
                {
                    ColumnNames = new string[] { "C1" },
                    IsUnique    = true,
                });
                allindexes.Add(new EntityDB.Design.IndexInfo()
                {
                    ColumnNames = new string[] { "C2", "C3" },
                });


                EJ.DBTable table = new EJ.DBTable();
                table.Name = "Test";

                #region CreateTable
                if (true)
                {
                    CreateTableAction _CreateTableAction = new CreateTableAction(table, allColumns.ToArray(), allindexes.ToArray());
                    _CreateTableAction.Invoke(db);

                    foreach (var c in allColumns)
                    {
                        c.ChangedProperties.Clear();
                        c.BackupChangedProperties.Clear();
                    }

                    checkColumns(dbservice, db, table.Name, allColumns, allindexes);
                }
                #endregion

                #region 测试自增长id
                if (true)
                {
                    Way.EntityDB.CustomDataItem dataitem = new EntityDB.CustomDataItem("test", "id", null);
                    dataitem.SetValue("c1", "C1");
                    dataitem.SetValue("c2", "C2");
                    dataitem.SetValue("c3", 3);
                    db.Insert(dataitem);
                    if (dataitem.GetValue("id") == null)
                    {
                        throw new Exception("测试自增长id失败");
                    }
                    db.ExecSqlString("delete from test");
                }
                #endregion

                #region ChangeTable1
                if (true)
                {
                    EJ.DBColumn[] newcolumns = new EJ.DBColumn[2];
                    newcolumns[0] = (new EJ.DBColumn()
                    {
                        Name = "N0",
                        dbType = "varchar",
                        length = "30",
                        defaultValue = "t'b"
                    });
                    newcolumns[1] = (new EJ.DBColumn()
                    {
                        Name = "N1",
                        dbType = "int",
                        defaultValue = "18"
                    });


                    EJ.DBColumn[] changedColumns = new EJ.DBColumn[2];
                    changedColumns[0]              = allColumns.FirstOrDefault(m => m.Name == "C3");
                    changedColumns[0].Name         = "C3_changed";
                    changedColumns[0].dbType       = "varchar";
                    changedColumns[0].defaultValue = "1'a";
                    changedColumns[0].CanNull      = false;
                    changedColumns[0].length       = "88";


                    changedColumns[1] = allColumns.FirstOrDefault(m => m.Name == "Id");
                    changedColumns[1].IsAutoIncrement = false;
                    changedColumns[1].IsPKID          = false;
                    changedColumns[1].CanNull         = true;



                    EJ.DBColumn[] deletecolumns = new EJ.DBColumn[1];
                    deletecolumns[0] = allColumns.FirstOrDefault(m => m.Name == "C2");

                    allColumns.Remove(deletecolumns[0]);

                    allindexes.Clear();
                    allindexes.Add(new EntityDB.Design.IndexInfo()
                    {
                        ColumnNames = new string[] { "N0", "C3_changed" },
                        IsUnique    = true,
                        IsClustered = true
                    });

                    var otherColumns = (from m in allColumns
                                        where changedColumns.Contains(m) == false
                                        select m).ToArray();

                    new ChangeTableAction(table.Name, "Test2", newcolumns, changedColumns, deletecolumns, otherColumns, allindexes.ToArray())
                    .Invoke(db);
                    table.Name = "Test2";
                    allColumns.AddRange(newcolumns);

                    foreach (var c in allColumns)
                    {
                        c.ChangedProperties.Clear();
                        c.BackupChangedProperties.Clear();
                    }
                    checkColumns(dbservice, db, table.Name, allColumns, allindexes);
                }
                #endregion

                #region ChangeTable2
                if (true)
                {
                    EJ.DBColumn[] newcolumns     = new EJ.DBColumn[0];
                    EJ.DBColumn[] changedColumns = new EJ.DBColumn[1];
                    changedColumns[0] = allColumns.FirstOrDefault(m => m.Name == "Id");
                    changedColumns[0].IsAutoIncrement = true;
                    changedColumns[0].IsPKID          = true;
                    changedColumns[0].CanNull         = false;


                    EJ.DBColumn[] deletecolumns = new EJ.DBColumn[0];

                    var otherColumns = (from m in allColumns
                                        where changedColumns.Contains(m) == false
                                        select m).ToArray();

                    new ChangeTableAction(table.Name, "Test3", newcolumns, changedColumns, deletecolumns, otherColumns, allindexes.ToArray())
                    .Invoke(db);
                    table.Name = "Test3";
                    allColumns.AddRange(newcolumns);

                    foreach (var c in allColumns)
                    {
                        c.ChangedProperties.Clear();
                        c.BackupChangedProperties.Clear();
                    }

                    checkColumns(dbservice, db, table.Name, allColumns, allindexes);
                }
                #endregion
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (db != null)
                {
                    db.DBContext.Dispose();
                }
            }
        }
Beispiel #2
0
        static void checkColumns(IDatabaseDesignService design, IDatabaseService db, string table, List <EJ.DBColumn> allcolumns, List <EntityDB.Design.IndexInfo> allindex)
        {
            var columns = design.GetCurrentColumns(db, table.ToLower());
            var indexes = design.GetCurrentIndexes(db, table.ToLower());

            if (allcolumns.Count != columns.Count)
            {
                throw new Exception("column 数量不一致");
            }
            foreach (var column in allcolumns)
            {
                if (column.defaultValue == null)
                {
                    column.defaultValue = "";
                }

                var compareColumn = columns.FirstOrDefault(m => m.Name.ToLower() == column.Name.ToLower());
                if (compareColumn == null)
                {
                    throw new Exception("找不到字段" + column.Name);
                }

                if (compareColumn.defaultValue == null)
                {
                    compareColumn.defaultValue = "";
                }

                if (column.CanNull != compareColumn.CanNull)
                {
                    throw new Exception($"column:{column.Name} CanNull 不一致");
                }
                if (column.dbType != compareColumn.dbType)
                {
                    throw new Exception($"column:{column.Name} dbType 不一致");
                }
                if (column.defaultValue != compareColumn.defaultValue)
                {
                    throw new Exception($"column:{column.Name} defaultValue 不一致 {column.defaultValue}  vs  {compareColumn.defaultValue}");
                }
                if (column.IsAutoIncrement != compareColumn.IsAutoIncrement)
                {
                    throw new Exception($"column:{column.Name} IsAutoIncrement 不一致");
                }
                if (column.IsPKID != compareColumn.IsPKID)
                {
                    throw new Exception($"column:{column.Name} IsPKID 不一致");
                }
                if (column.dbType.Contains("char"))
                {
                    if (column.length != compareColumn.length)
                    {
                        throw new Exception($"column:{column.Name} length 不一致 {column.length}  vs  {compareColumn.length}");
                    }
                }
            }

            if (allindex.Count != indexes.Count)
            {
                throw new Exception("index 数量不一致");
            }
            foreach (var index in allindex)
            {
                if (indexes.Any(m => m.ColumnNames.OrderBy(n => n).ToArray().ToSplitString(",").ToLower() == index.ColumnNames.OrderBy(n => n).ToArray().ToSplitString(",").ToLower()) == false)
                {
                    throw new Exception($"index:{index.Name} ColumnNames 不一致");
                }
                if (indexes.Any(m => m.ColumnNames.OrderBy(n => n).ToArray().ToSplitString(",").ToLower() == index.ColumnNames.OrderBy(n => n).ToArray().ToSplitString(",").ToLower() && m.IsUnique == index.IsUnique) == false)
                {
                    throw new Exception($"index:{index.Name} IsUnique 不一致");
                }
            }
        }
Beispiel #3
0
        public void Handle(string originalUrl, HttpConnectInformation connectInfo, ref bool handled)
        {
            if (originalUrl.Contains("/DownloadDatabaseCode.aspx") == false)
            {
                return;
            }
            handled = true;
            try
            {
                if (connectInfo.Session["user"] == null)
                {
                    throw new Exception("not arrow");
                }

                int databaseid = Convert.ToInt32(connectInfo.Request.Query["databaseid"]);
                using (EJDB db = new EJDB())
                {
                    var database = db.Databases.FirstOrDefault(m => m.id == databaseid);
                    if (database.dllPath == null || database.dllPath.StartsWith("{") == false)
                    {
                        database.dllPath = Newtonsoft.Json.JsonConvert.SerializeObject(new
                        {
                            db     = connectInfo.Request.Query["filepath"],
                            simple = "",
                        });
                    }
                    else
                    {
                        var json = (Newtonsoft.Json.Linq.JToken)Newtonsoft.Json.JsonConvert.DeserializeObject(database.dllPath);
                        json["db"]       = connectInfo.Request.Query["filepath"];
                        database.dllPath = json.ToString();
                    }
                    db.Update(database);

                    var tables = db.DBTable.Where(m => m.DatabaseID == databaseid).ToList();
                    System.IO.BinaryWriter bw = new System.IO.BinaryWriter(connectInfo.Response);
                    bw.Write("start");

                    var invokingDB = Way.EntityDB.Design.DBHelper.CreateInvokeDatabase(database);
                    IDatabaseDesignService dbservice = Way.EntityDB.Design.DBHelper.CreateDatabaseDesignService((Way.EntityDB.DatabaseType)(int) database.dbType);


                    bw.Write(1);
                    ICodeBuilder codeBuilder = new CodeBuilder();

                    NamespaceCode namespaceCode  = new NamespaceCode(database.NameSpace);
                    NamespaceCode namespaceCode2 = new NamespaceCode(database.NameSpace + ".DB");
                    namespaceCode.AddUsing("System");
                    namespaceCode.AddUsing("Microsoft.EntityFrameworkCore");
                    namespaceCode.AddUsing("System.Collections.Generic");
                    namespaceCode.AddUsing("System.ComponentModel");
                    namespaceCode.AddUsing("System.Data");
                    namespaceCode.AddUsing("System.Linq");
                    namespaceCode.AddUsing("System.Text");
                    namespaceCode.AddUsing("System.ComponentModel.DataAnnotations");
                    namespaceCode.AddUsing("System.ComponentModel.DataAnnotations.Schema");
                    namespaceCode.AddUsing("Way.EntityDB.Attributes");
                    namespaceCode.AddUsing("System.Diagnostics.CodeAnalysis");
                    namespaceCode.AddBeforeCode("");
                    codeBuilder.BuilderDB(db, database, namespaceCode2, tables);

                    List <string> foreignKeys = new List <string>();
                    foreach (var table in tables)
                    {
                        codeBuilder.BuildTable(db, namespaceCode, table, foreignKeys);
                    }

                    bw.Write("code.cs");
                    string code = namespaceCode.Build() + "\r\n" + namespaceCode2.Build();
                    byte[] bs   = System.Text.Encoding.UTF8.GetBytes(code);
                    bw.Write(bs.Length);
                    bw.Write(bs);

                    bw.Write(":end");
                }
            }
            catch (Exception ex)
            {
                new System.IO.BinaryWriter(connectInfo.Response).Write(ex.Message);
            }
        }
        public void Handle(string originalUrl, HttpConnectInformation connectInfo, ref bool handled)
        {
            if (originalUrl.Contains("/DownLoadSimpleCodeHandler.aspx") == false)
            {
                return;
            }
            handled = true;
            try
            {
                if (connectInfo.Session["user"] == null)
                {
                    throw new Exception("not arrow");
                }

                int databaseid = Convert.ToInt32(connectInfo.Request.Query["databaseid"]);
                using (EJDB db = new EJDB())
                {
                    var database = db.Databases.FirstOrDefault(m => m.id == databaseid);
                    if (database.dllPath == null || database.dllPath.StartsWith("{") == false)
                    {
                        database.dllPath = Newtonsoft.Json.JsonConvert.SerializeObject(new {
                            simple = connectInfo.Request.Query["filepath"],
                            db     = "",
                        });
                    }
                    else
                    {
                        var json = (Newtonsoft.Json.Linq.JToken)Newtonsoft.Json.JsonConvert.DeserializeObject(database.dllPath);
                        json["simple"]   = connectInfo.Request.Query["filepath"];
                        database.dllPath = json.ToString();
                    }
                    db.Update(database);

                    var tables = db.DBTable.Where(m => m.DatabaseID == databaseid).ToList();
                    System.IO.BinaryWriter bw = new System.IO.BinaryWriter(connectInfo.Response);
                    bw.Write("start");

                    var invokingDB = Way.EntityDB.Design.DBHelper.CreateInvokeDatabase(database);
                    IDatabaseDesignService dbservice = Way.EntityDB.Design.DBHelper.CreateDatabaseDesignService((Way.EntityDB.DatabaseType)(int) database.dbType);


                    bw.Write(tables.Count * 1);
                    ICodeBuilder codeBuilder = new CodeBuilder();


                    foreach (var table in tables)
                    {
                        string[] codes = codeBuilder.BuildSimpleTable(db, database.NameSpace, table);
                        for (int i = 0; i < codes.Length; i++)
                        {
                            bw.Write(table.Name + "_" + i + ".cs");
                            byte[] bs = System.Text.Encoding.UTF8.GetBytes(codes[i]);
                            bw.Write(bs.Length);
                            bw.Write(bs);
                        }
                    }


                    bw.Write(":end");
                }
            }
            catch (Exception ex)
            {
                new System.IO.BinaryWriter(connectInfo.Response).Write(ex.Message);
            }
        }
Beispiel #5
0
        public static void Upgrade(EntityDB.DBContext dbContext, string designData)
        {
            if (designData.IsNullOrEmpty())
            {
                return;
            }

            byte[] bs;
            if (designData.StartsWith("\r\n"))
            {
                bs = System.Convert.FromBase64String(designData.Substring(2));
                bs = UnGzip(bs);
            }
            else
            {
                bs = System.Convert.FromBase64String(designData);
            }
            using (var dset = Newtonsoft.Json.JsonConvert.DeserializeObject <WayDataSet>(System.Text.Encoding.UTF8.GetString(bs)))
            {
                if (dbContext == null)
                {
                    return;
                }

                bs = null;
                EntityDB.IDatabaseService db     = dbContext.Database;
                EntityDB.DatabaseType     dbType = dbContext.DatabaseType;

                IDatabaseDesignService dbservice = EntityDB.Design.DBHelper.CreateDatabaseDesignService(dbType);
                dbservice.CreateEasyJobTable(db);

                var dbconfig = db.ExecSqlString("select contentConfig from __wayeasyjob").ToString().ToJsonObject <DataBaseConfig>();
                if (string.IsNullOrEmpty(dbconfig.DatabaseGuid) == false && dbconfig.DatabaseGuid != dset.DataSetName)
                {
                    throw new Exception("此结构脚本并不是对应此数据库");
                }


                var dtable = dset.Tables[0];
                try
                {
                    var query = dtable.Rows.Where(m => (long)m["id"] > dbconfig.LastUpdatedID).OrderBy(m => (long)m["id"]).ToList();

                    if (query.Count > 0)
                    {
                        int?lastid   = Convert.ToInt32(query.Last()["id"]);
                        var assembly = typeof(Way.EntityDB.Design.Actions.CreateTableAction).GetTypeInfo().Assembly;
                        db.DBContext.BeginTransaction();
                        foreach (var datarow in query)
                        {
                            var rowid      = Convert.ToInt32(datarow["id"]);
                            var actionItem = dataRowToAction(assembly, datarow);

                            if (actionItem is EntityDB.Design.Actions.ChangeTableAction)
                            {
                                var changeAction = (EntityDB.Design.Actions.ChangeTableAction)actionItem;
                                changeAction._getColumnsFunc = () => {
                                    List <EJ.DBColumn> allcolumns = new List <EJ.DBColumn>();

                                    //往上逆推,查找字段信息
                                    var        datarows         = dtable.Rows.Where(m => (long)m["id"] < rowid).OrderByDescending(m => (long)m["id"]).ToList();
                                    var        curTableName     = changeAction.OldTableName;
                                    List <int> deletedColumnids = new List <int>();

                                    foreach (var preRow in datarows)
                                    {
                                        var preAction = dataRowToAction(assembly, preRow);
                                        if (preAction is EntityDB.Design.Actions.CreateTableAction)
                                        {
                                            var tableAction = preAction as EntityDB.Design.Actions.CreateTableAction;
                                            if (tableAction.Table.Name != curTableName)
                                            {
                                                continue;
                                            }
                                            else
                                            {
                                                foreach (var c in tableAction.Columns)
                                                {
                                                    if (allcolumns.Any(m => m.id == c.id) == false)
                                                    {
                                                        allcolumns.Add(c);
                                                    }
                                                }
                                                break;
                                            }
                                        }
                                        else if (preAction is EntityDB.Design.Actions.ChangeTableAction)
                                        {
                                            var preChangeAction = preAction as EntityDB.Design.Actions.ChangeTableAction;
                                            if (preChangeAction.NewTableName != curTableName)
                                            {
                                                continue;
                                            }
                                            else
                                            {
                                                curTableName = preChangeAction.OldTableName;
                                                foreach (var c in preChangeAction.newColumns)
                                                {
                                                    if (deletedColumnids.Contains(c.id.Value) == false && allcolumns.Any(m => m.id == c.id) == false)
                                                    {
                                                        allcolumns.Add(c);
                                                    }
                                                }
                                                foreach (var c in preChangeAction.changedColumns)
                                                {
                                                    if (deletedColumnids.Contains(c.id.Value) == false && allcolumns.Any(m => m.id == c.id) == false)
                                                    {
                                                        allcolumns.Add(c);
                                                    }
                                                }
                                                foreach (var c in preChangeAction.deletedColumns)
                                                {
                                                    deletedColumnids.Add(c.id.Value);
                                                }
                                            }
                                        }
                                    }
                                    return(allcolumns);
                                };
                            }

                            actionItem.Invoke(db);
                        }

                        SetLastUpdateID(lastid.Value, dset.DataSetName, db);
                        db.DBContext.CommitTransaction();
                    }
                }
                catch
                {
                    db.DBContext.RollbackTransaction();
                    throw;
                }
            }
        }
Beispiel #6
0
        public static void Upgrade(EntityDB.DBContext dbContext, string designData)
        {
            if (designData.IsNullOrEmpty())
            {
                return;
            }

            byte[] bs;
            if (designData.StartsWith("\r\n"))
            {
                bs = System.Convert.FromBase64String(designData.Substring(2));
                bs = UnGzip(bs);
            }
            else
            {
                bs = System.Convert.FromBase64String(designData);
            }
            using (var dset = Newtonsoft.Json.JsonConvert.DeserializeObject <WayDataSet>(System.Text.Encoding.UTF8.GetString(bs)))
            {
                if (dbContext == null)
                {
                    return;
                }

                bs = null;
                EntityDB.IDatabaseService db     = dbContext.Database;
                EntityDB.DatabaseType     dbType = dbContext.DatabaseType;

                IDatabaseDesignService dbservice = EntityDB.Design.DBHelper.CreateDatabaseDesignService(dbType);
                dbservice.CreateEasyJobTable(db);

                var dbconfig = db.ExecSqlString("select contentConfig from __wayeasyjob").ToString().ToJsonObject <DataBaseConfig>();
                if (string.IsNullOrEmpty(dbconfig.DatabaseGuid) == false && dbconfig.DatabaseGuid != dset.DataSetName)
                {
                    throw new Exception("此结构脚本并不是对应此数据库");
                }


                var dtable       = dset.Tables[0];
                int currentRowId = 0;
                try
                {
                    var query = dtable.Rows.Where(m => (long)m["id"] > dbconfig.LastUpdatedID).OrderBy(m => (long)m["id"]).ToList();

                    if (query.Count > 0)
                    {
                        var allquery = dtable.Rows.OrderBy(m => (long)m["id"]).ToList();
                        var assembly = typeof(Way.EntityDB.Design.Actions.CreateTableAction).GetTypeInfo().Assembly;
                        //因为通过cs导入结构后,column的id发生变化,所以需要重新统一一下column的id
                        for (int i = 0; i < allquery.Count; i++)
                        {
                            var datarow = allquery[i];
                            currentRowId = Convert.ToInt32(datarow["id"]);
                            var actionItem = dataRowToAction(assembly, datarow);

                            if (actionItem is EntityDB.Design.Actions.CreateTableAction createAction)
                            {
                                ResetColumnId(allquery, createAction.Table.Name, i);
                            }
                        }

                        int?lastid = Convert.ToInt32(query.Last()["id"]);
                        db.DBContext.BeginTransaction();
                        for (int i = 0; i < query.Count; i++)
                        {
                            var datarow = query[i];
                            currentRowId = Convert.ToInt32(datarow["id"]);
                            var actionItem = dataRowToAction(assembly, datarow);

                            if (actionItem is EntityDB.Design.Actions.ChangeTableAction)
                            {
                                var changeAction = (EntityDB.Design.Actions.ChangeTableAction)actionItem;

                                changeAction._getColumnsFunc = () => {
                                    return(FindAllColumnsForChangeTable(assembly, changeAction, currentRowId, dtable.Rows).ToList());
                                };
                            }
                            else if (actionItem is EntityDB.Design.Actions.CreateTableAction createAction)
                            {
                                //往下查找表的变更
                                var ret = FindCreateTableActionAllColumns(assembly, createAction, query, i + 1);

                                if (ret == false)
                                {
                                    //表后来删除了
                                    query.RemoveAt(i);
                                    i--;
                                    continue;
                                }
                            }

                            actionItem.Invoke(db);
                        }

                        SetLastUpdateID(lastid.Value, dset.DataSetName, db);
                        db.DBContext.CommitTransaction();
                    }
                }
                catch (Exception ex)
                {
                    db.DBContext.RollbackTransaction();
                    throw new Exception("发生错误,最后执行的id:" + currentRowId, ex);
                }
            }
        }
Beispiel #7
0
        public static void Upgrade(EntityDB.DBContext dbContext, string designData)
        {
            if (designData.IsNullOrEmpty())
            {
                return;
            }

            byte[] bs;
            if (designData.StartsWith("\r\n"))
            {
                bs = System.Convert.FromBase64String(designData.Substring(2));
                bs = UnGzip(bs);
            }
            else
            {
                bs = System.Convert.FromBase64String(designData);
            }
            using (var dset = Newtonsoft.Json.JsonConvert.DeserializeObject <WayDataSet>(System.Text.Encoding.UTF8.GetString(bs)))
            {
                if (dbContext == null)
                {
                    return;
                }

                bs = null;
                EntityDB.IDatabaseService db     = dbContext.Database;
                EntityDB.DatabaseType     dbType = dbContext.DatabaseType;

                IDatabaseDesignService dbservice = EntityDB.Design.DBHelper.CreateDatabaseDesignService(dbType);
                dbservice.CreateEasyJobTable(db);

                var dbconfig = db.ExecSqlString("select contentConfig from __wayeasyjob").ToString().ToJsonObject <DataBaseConfig>();
                if (string.IsNullOrEmpty(dbconfig.DatabaseGuid) == false && dbconfig.DatabaseGuid != dset.DataSetName)
                {
                    throw new Exception("此结构脚本并不是对应此数据库");
                }


                var dtable = dset.Tables[0];
                try
                {
                    var query = dtable.Rows.Where(m => (long)m["id"] > dbconfig.LastUpdatedID).OrderBy(m => (long)m["id"]).ToList();

                    if (query.Count > 0)
                    {
                        int?lastid   = Convert.ToInt32(query.Last()["id"]);
                        var assembly = typeof(Way.EntityDB.Design.Actions.CreateTableAction).GetTypeInfo().Assembly;
                        db.DBContext.BeginTransaction();
                        foreach (var datarow in query)
                        {
                            string actionType = datarow["type"].ToString();

                            string json = datarow["content"].ToString();

                            Type type       = assembly.GetType($"Way.EntityDB.Design.Actions.{actionType}");
                            var  actionItem = (EntityDB.Design.Actions.Action)Newtonsoft.Json.JsonConvert.DeserializeObject(json, type);

                            actionItem.Invoke(db);
                        }

                        SetLastUpdateID(lastid.Value, dset.DataSetName, db);
                        db.DBContext.CommitTransaction();
                    }
                }
                catch
                {
                    db.DBContext.RollbackTransaction();
                    throw;
                }
            }
        }