예제 #1
0
파일: Exporter.cs 프로젝트: fjiang2/sqlcon
        private void ExportDataContractClass(int version, TableNameData tnd)
        {
            DataTable dt          = tnd.Data;
            bool      allowDbNull = cmd.Has("NULL");

            string[] keys = cmd.Columns;

            DataColumn[] pk = dt.PrimaryKey;
            if (pk == null || pk.Length == 0)
            {
                pk = dt.PrimaryKeys(keys);

                if (pk.Length == 0)
                {
                    dt.PrimaryKey = new DataColumn[] { dt.Columns[0] };
                    cout.WriteLine($"no primary key found on Table: \"{dt.TableName}\"");
                }

                dt.PrimaryKey = pk;
            }


            TheClassBuilder gen = null;

            if (version == 0)
            {
                gen = new DataContractClassBuilder(cmd, tnd.Name, dt, allowDbNull);
            }
            else if (version == 1)
            {
                gen = new DataContract1ClassBuilder(cmd, tnd.Name, dt, allowDbNull);
            }
            else
            {
                gen = new DataContract2ClassBuilder(cmd, tnd.Name, dt, allowDbNull);
            }

            if (gen != null)
            {
                string path = cmd.OutputPath(ConfigKey._GENERATOR_DC_PATH, $"{ConfigurationEnvironment.MyDocuments}\\dc");
                string ns   = cmd.GetValue("ns", ConfigKey._GENERATOR_DC_NS, "Sys.DataModel.DataContract");
                string mtd  = cmd.GetValue("method");

                gen.SetNamespace(ns);
                gen.SetClassName(dt.TableName);
                gen.SetMethod(mtd);
                string file = gen.WriteFile(path);
                cout.WriteLine("code generated on {0}", file);
            }

            TableSchemaCache.Clear();
        }
예제 #2
0
파일: Exporter.cs 프로젝트: fjiang2/sqlcon
        public void ExportDataContract(Command cmd, int version)
        {
            DataTable dt = null;
            if (SqlShell.LastResult is DataTable)
            {
                dt = SqlShell.LastResult as DataTable;
            }

            if (dt == null)
            {
                if (tname != null)
                {
                    dt = new SqlCmd(tname.Provider, $"SELECT TOP 1 * FROM {tname.FormalName}").FillDataTable();
                }
                else
                {
                    stdio.ErrorFormat("data table cannot find, use command type or select first");
                    return;
                }
            }

            string path = cmd.GetValue("out") ?? cfg.GetValue<string>("dc.path", $"{Configuration.MyDocuments}\\dc");
            string ns = cmd.GetValue("ns") ?? cfg.GetValue<string>("dc.ns", "Sys.DataModel.DataContracts");
            string clss = cmd.GetValue("class") ?? cfg.GetValue<string>("dc.class", "DataContract");
            string mtd = cmd.GetValue("method");
            string[] keys = cmd.Columns;

            if (version == 1)
            {
                var builder = new DataContractClassBuilder(ns, cmd, dt)
                {
                    cname = clss,
                    mtd = mtd,
                    keys = keys
                };

                string file = builder.WriteFile(path);
                stdio.WriteLine("code generated on {0}", file);
            }
            else
            {
                var builder = new DataContract2ClassBuilder(ns, cmd, dt)
                {
                    cname = clss,
                    mtd = mtd
                };

                string file = builder.WriteFile(path);
                stdio.WriteLine("code generated on {0}", file);
            }
        }