- 增加 达梦数据库 ODBC 适配,和单元测试,支持 CodeFirst 模式开发;

This commit is contained in:
28810
2019-12-09 21:25:01 +08:00
parent cc585b4cd5
commit 206d7bdbe0
46 changed files with 10682 additions and 17 deletions

View File

@ -8,7 +8,7 @@ namespace FreeSql
MySql, SqlServer, PostgreSQL, Oracle, Sqlite,
OdbcOracle, OdbcSqlServer, OdbcMySql, OdbcPostgreSQL,
OdbcOracle, OdbcSqlServer, OdbcMySql, OdbcPostgreSQL,
/// <summary>
/// 通用的 Odbc 实现,只能做基本的 Crud 操作 <para></para>
@ -19,6 +19,11 @@ namespace FreeSql
///
/// 适配新的 OdbcAdapter请在 FreeSqlBuilder.Build 之后调用 IFreeSql.SetOdbcAdapter 方法设置
/// </summary>
Odbc
Odbc,
/// <summary>
/// 国产数据库达梦
/// </summary>
OdbcDameng,
}
}

View File

@ -484,6 +484,11 @@
适配新的 OdbcAdapter请在 FreeSqlBuilder.Build 之后调用 IFreeSql.SetOdbcAdapter 方法设置
</summary>
</member>
<member name="F:FreeSql.DataType.OdbcDameng">
<summary>
国产数据库达梦
</summary>
</member>
<member name="M:FreeSql.Extensions.EntityUtil.EntityUtilExtensions.GetEntityKeyString(IFreeSql,System.Type,System.Object,System.Boolean,System.String)">
<summary>
获取实体的主键值,以 "*|_,[,_|*" 分割,当任意一个主键属性无值时,返回 null

View File

@ -200,6 +200,11 @@ namespace FreeSql
if (type == null) throw new Exception("缺少 FreeSql 数据库实现包FreeSql.Provider.Odbc.dll可前往 nuget 下载");
break;
case DataType.OdbcDameng:
type = Type.GetType("FreeSql.Odbc.Dameng.OdbcDamengProvider`1,FreeSql.Provider.Odbc")?.MakeGenericType(typeof(TMark));
if (type == null) throw new Exception("缺少 FreeSql 数据库实现包FreeSql.Provider.Odbc.dll可前往 nuget 下载");
break;
default: throw new Exception("未指定 UseConnectionString");
}
}

View File

@ -122,6 +122,7 @@ namespace FreeSql.Internal.CommonProvider
{
if (_tableRule == null) return _table.DbName;
var newname = _tableRule(_table.DbName);
if (newname == _table.DbName) return _table.DbName;
if (string.IsNullOrEmpty(newname)) return _table.DbName;
if (_orm.CodeFirst.IsSyncStructureToLower) newname = newname.ToLower();
if (_orm.CodeFirst.IsSyncStructureToUpper) newname = newname.ToUpper();

View File

@ -374,6 +374,7 @@ namespace FreeSql.Internal.CommonProvider
{
if (_tableRule == null) return _table.DbName;
var newname = _tableRule(_table.DbName);
if (newname == _table.DbName) return _table.DbName;
if (string.IsNullOrEmpty(newname)) return _table.DbName;
if (_orm.CodeFirst.IsSyncStructureToLower) newname = newname.ToLower();
if (_orm.CodeFirst.IsSyncStructureToUpper) newname = newname.ToUpper();

View File

@ -917,7 +917,7 @@ namespace FreeSql.Internal.CommonProvider
protected List<Dictionary<Type, string>> GetTableRuleUnions()
{
var unions = new List<Dictionary<Type, string>>();
var trs = _tableRules.Any() ? _tableRules : new List<Func<Type, string, string>>(new[] { new Func<Type, string, string>((type, oldname) => oldname) });
var trs = _tableRules.Any() ? _tableRules : new List<Func<Type, string, string>>(new[] { new Func<Type, string, string>((type, oldname) => null) });
foreach (var tr in trs)
{
var dict = new Dictionary<Type, string>();

View File

@ -498,6 +498,7 @@ namespace FreeSql.Internal.CommonProvider
{
if (_tableRule == null) return _table.DbName;
var newname = _tableRule(_table.DbName);
if (newname == _table.DbName) return _table.DbName;
if (string.IsNullOrEmpty(newname)) return _table.DbName;
if (_orm.CodeFirst.IsSyncStructureToLower) newname = newname.ToLower();
if (_orm.CodeFirst.IsSyncStructureToUpper) newname = newname.ToUpper();

View File

@ -217,6 +217,7 @@ namespace FreeSql.Internal
break;
case DataType.Oracle:
case DataType.OdbcOracle:
case DataType.OdbcDameng:
if (strlen < 0) colattr.DbType = Regex.Replace(colattr.DbType, charPatten, $"$1(4000)");
else colattr.DbType = Regex.Replace(colattr.DbType, charPatten, $"$1({strlen})");
break;