EF Core 3.x 中包含的中断性变更
1、生成类 \Models\AssetModel.Context.cs
namespace AssetCheck.Models
{
using System.Configuration;
using System.Data.Entity;
public partial class AssetEntities : DbContext
{
//public AssetEntities()
// : base("name=AssetEntities")
//{
//}
//public AssetEntities()
// : base(DBConnectionUtil.EntityConnectionStr)
//{
//}
//单例模式
public AssetEntities()
: base(CcpConfig.Instance.AssetEntities)
{
}
}
public class DBConnectionUtil
{
private static string IP { get; set; }
private static string UserId { get; set; }
private static string Password { get; set; }
private static string DBName { get; set; }
public static string EntityConnectionStr { get; set; }
private DBConnectionUtil()
{
GetDBSetting();
}
private void GetDBSetting()
{
var connectStr = ConfigurationManager.ConnectionStrings["SqlConnection"].ConnectionString;
var settingArray = connectStr.Split(';');
foreach (var setting in settingArray)
{
var keyVal = setting.Split('=');
switch (keyVal[0])
{
case "Data Source": IP = keyVal[1]; break;
case "Initial Catalog": DBName = keyVal[1]; break;
case "User ID": UserId = keyVal[1]; break;
case "Password": Password = keyVal[1]; break;
}
}
EntityConnectionStr = "metadata=res://*/Models.AssetModel.csdl|res://*/Models.AssetModel.ssdl|res://*/Models.AssetModel.msl;provider=System.Data.SqlClient;provider connection string=\"data source="
+ IP + ";initial catalog="
+ DBName + ";user id="
+ UserId + ";password="
+ Password + ";MultipleActiveResultSets=True;App=EntityFramework\"";
}
}
}
2、单例模式
using AssetCheck.Common;
using java.security;
using javax.crypto;
using javax.crypto.spec;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Web;
namespace AssetCheck
{
public class CcpConfig
{
public string SqlConnection { get; private set; }
public string AssetEntities { get; private set; }
private static string IP { get; set; }
private static string UserId { get; set; }
private static string Password { get; set; }
private static string DBName { get; set; }
public static string EntityConnectionStr { get; set; }
private static CcpConfig _instance;
private CcpConfig() { }
public static CcpConfig Instance
{
get
{
if (_instance == null)
{
_instance = new CcpConfig();
_instance.GetPassword();
return _instance;
}
else
return _instance;
}
}
#region 数据库密码加密信息
private void GetPassword()
{
string pwd = string.Empty;
var isLocal = ConfigurationManager.AppSettings["IsLocal"].ToString();
var connectStr = ConfigurationManager.ConnectionStrings["SqlConnection"].ConnectionString;
var settingArray = connectStr.Split(';');
foreach (var setting in settingArray)
{
var keyVal = setting.Split('=');
switch (keyVal[0])
{
case "Data Source": IP = keyVal[1]; break;
case "Initial Catalog": DBName = keyVal[1]; break;
case "User ID": UserId = keyVal[1]; break;
case "Password": Password = keyVal[1]; break;
}
}
if (isLocal == "true")
{
AssetEntities = "metadata=res://*/Models.AssetModel.csdl|res://*/Models.AssetModel.ssdl|res://*/Models.AssetModel.msl;provider=System.Data.SqlClient;provider connection string=\"data source="
+ IP + ";initial catalog="
+ DBName + ";user id="
+ UserId + ";password="
+ Password + ";MultipleActiveResultSets=True;App=EntityFramework\"";
return;
}
try
{
string appId = ConfigurationManager.AppSettings["ccp_appId"];
string key = ConfigurationManager.AppSettings["ccp_key"];
Dictionary<string, string> dict = new Dictionary<string, string>();
dict.Add("requestId", StringPlus.GenerateNonceStr());
dict.Add("requestTime", DateTime.Now.ToString("yyyyMMddHHmmssfff"));
dict.Add("appId", appId);
dict.Add("safe", ConfigurationManager.AppSettings["ccp_safe"]);
dict.Add("folder", ConfigurationManager.AppSettings["ccp_folder"]);
dict.Add("object", ConfigurationManager.AppSettings["ccp_object"]);
dict.Add("key", key);
dict.Add("reason", "imms");
dict.Add("sign", MakeSing(appId + "&" + key));
//var parm = StringPlus.DictionaryToString(dict);
string parm = JsonConvert.SerializeObject(dict);
string response = PingAnServer.DoPostJson(InterfaceUrl.ccp_url, parm);
PIDMSCCPResponse result = (PIDMSCCPResponse)JsonConvert.DeserializeObject(response, typeof(PIDMSCCPResponse));
if (result.code == "200")
{
pwd = decrypt(result.password, key);
AssetEntities = "metadata=res://*/Models.AssetModel.csdl|res://*/Models.AssetModel.ssdl|res://*/Models.AssetModel.msl;provider=System.Data.SqlClient;provider connection string=\"data source="
+ IP + ";initial catalog="
+ DBName + ";user id="
+ UserId + ";password="
+ pwd + ";MultipleActiveResultSets=True;App=EntityFramework\"";
}
else
{
StringPlus.WriteLog("1", "Utility.GetPassword", "Ln 823 code:" + result.code);
}
}
catch (Exception ex)
{
StringPlus.WriteLog("1", "Utility.GetPassword Exception", "Ln 828 " + ex.Message);
}
}
private string MakeSing(string s)
{
try
{
MessageDigest digest = MessageDigest.getInstance("SHA-1");
digest.update(Encoding.UTF8.GetBytes(s));
byte[] messageDigest = digest.digest();
return byte2hex(messageDigest);
}
catch (Exception ex)
{
StringPlus.WriteLog("1", "Utility.MakeSing", "Ln 844 " + ex.Message);
return null;
}
}
/// <summary>
/// 加密
/// </summary>
/// <param name="b"></param>
/// <returns></returns>
private string byte2hex(byte[] b)
{
char[] c = "0123456789ABCDEF".ToCharArray();
if (b == null)
{
return null;
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < b.Length; i++)
{
int v = b[i] & 0xff;
sb.Append(c[v / 0x10]).Append(c[v % 0x10]);
}
return sb.ToString();
}
private byte[] hex2byte(string s)
{
try
{
if (s == null)
{
return null;
}
byte[] b = Encoding.UTF8.GetBytes(s);
if (b.Length % 2 != 0)
{
return null;
}
byte[] b2 = new byte[b.Length / 2];
for (int n = 0; n < b.Length; n += 2)
{
String item = System.Text.Encoding.Default.GetString(b, n, 2);
b2[n / 2] = (byte)Convert.ToInt32(item, 16);
}
return b2;
}
catch (Exception)
{
return null;
}
}
/// <summary>
/// 解密
/// </summary>
/// <param name="s"></param>
/// <param name="k"></param>
/// <returns></returns>
private string decrypt(string s, string k)
{
if (string.IsNullOrEmpty(s) || string.IsNullOrEmpty(k))
{
return "";
}
SecretKeySpec key = new SecretKeySpec(Encoding.UTF8.GetBytes(k), "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, key);
try
{
byte[] result = cipher.doFinal(hex2byte(s));
string originalString = System.Text.Encoding.Default.GetString(result);
return originalString;
}
catch (Exception ex)
{
StringPlus.WriteLog("1", "Utility.decrypt", "Ln 920 " + ex.Message);
return null;
}
}
#endregion
}
}
3、
4、