到时候数据库咋更新呢

时间:2020-03-14 07:40来源:快三在线投注平台数据库
前言 品种中貌似分测量检验景况,生产条件,当大家的类型经验了一回周期跨度较长的立异后,当我们揭发到坐蓐意况时,主要的任务是将新添的表,字段更新到生育数据库。超多时候

前言

品种中貌似分测量检验景况,生产条件,当大家的类型经验了一回周期跨度较长的立异后,当我们揭发到坐蓐意况时,主要的任务是将新添的表,字段更新到生育数据库。超多时候,当大家发表更新的时候,已经很难记得做了何等改换。

金沙2015app下载 ,当然有一些人讲,1.EF Code First 有history记录,那是一种艺术,可信赖么?离谱。相信即便是用Code First,直接改数据库的一定不独有自个儿一个。

2.查看实体类退换记录,这也是贰个艺术。那借使用的DB First的吗?当然也能够看,正是很费劲。

3.支出进度中,对数据库的更换记下来。这么做过的必定也不绝于耳本人叁个。手动狗头

。。。。。

正午的时候,就想着其余贰个门类前段时期要更新,改了N多的事物,届期候数据库咋更新呢。就想着写个工具比较五个版本数据库,表名称,字段,字段类型的分别。

说干就干。

调整台应用程序,这段时间只得相比较新扩张,改革。

using System;using System.Collections.Generic;using System.Data.SqlClient;using System.Linq;using System.Text;using Microsoft.EntityFrameworkCore;namespace EFGetTable{ class Program { static void Main(string[] args) { string prdconnectionstring = "Data Source=localhost;initial catalog=ttPRD;user id=sa;password=password;MultipleActiveResultSets=True"; var prd = GetTableNames(prdconnectionstring); string qasconnectionstring = "Data Source=localhost;initial catalog=ttqas;user id=sa;password=password;MultipleActiveResultSets=True"; var qas = GetTableNames(qasconnectionstring); CompareTable(prd, qas); } public static ListTableInfo GetTableNames(string connectionstr) { var tableresult = new ListTableInfo(); string sqlTableName = "Select * From Information_Schema.Tables"; using (SqlConnection connection = new SqlConnection(connectionstr)) { using (SqlCommand cmd = new SqlCommand(sqlTableName, connection)) { try { connection.Open(); SqlDataReader dr = cmd.ExecuteReader();// while (dr.Read()) { // 表名 TableInfo table = new TableInfo(); table.TableName = dr["Table_Name"].ToString(); table.columns.AddRange(GetColumnNamesByTable(dr["Table_Name"].ToString(), connection)); tableresult.Add(table); } connection.Close(); } catch (System.Data.SqlClient.SqlException e) { Console.ForegroundColor = ConsoleColor.Red; Console.Error.WriteLine(e.Message); connection.Close(); } } return tableresult; } } public static ListCloumnInfo GetColumnNamesByTable(string tableName, SqlConnection connection) { var Columnresults = new ListCloumnInfo(); string sqlcolum = $"Select * From Information_Schema.Columns t Where t.Table_Name ='{tableName}'"; using (SqlCommand cmd = new SqlCommand(sqlcolum, connection)) { SqlDataReader dr = cmd.ExecuteReader();// while (dr.Read()) { // 表名 CloumnInfo column = new CloumnInfo(); column.CloumnName = dr["Column_name"].ToString(); column.DateType = dr["DATA_TYPE"].ToString() + dr["CHARACTER_MAXIMUM_LENGTH"].ToString(); Columnresults.Add(column); } return Columnresults; } } public static void CompareTable(ListTableInfo prd, ListTableInfo qas) { foreach (var p in qas) { var tablequery = prd.AsQueryable().Where(t = t.TableName.Equals(p.TableName)); if (!tablequery.Any()) { Console.WriteLine($"New Created Table {p.TableName}"); continue; } else { var querytable = tablequery.FirstOrDefault(); p.columns.ForEach(c = { var Cloumnquery = querytable.columns.Select(cc = cc.CloumnName).Contains(c.CloumnName); if (!Cloumnquery) { Console.WriteLine($"New add cloumn: {c.CloumnName} on Table {p.TableName}"); } else { var querycloumn = querytable.columns.Where(qt = qt.CloumnName.Equals(c.CloumnName)).FirstOrDefault(); if (!querycloumn.DateType.Equals(c.DateType)) { Console.WriteLine($"DateType Different: cloumn: {c.CloumnName} , {querycloumn.DateType}=={c.DateType} on Table {p.TableName}"); } } }); } } } } public class TableInfo { public TableInfo() { columns = new ListCloumnInfo(); } public string TableName { get; set; } public ListCloumnInfo columns { get; set; } } public class CloumnInfo { public string CloumnName { get; set; } public string DateType { get; set; } }}

测量试验结果

总结

上述正是那篇作品的全体内容了,希望本文的剧情对大家的读书或然工作有着自然的参照学习价值,谢谢大家对剧本之家的支撑。

编辑:快三在线投注平台数据库 本文来源:到时候数据库咋更新呢

关键词: