- 增加 StringLength/MaxLength 对 byte[] 的支持;

This commit is contained in:
28810
2020-06-23 14:48:06 +08:00
parent 4ddf4c01a6
commit 73eb3c8b21
12 changed files with 239 additions and 4 deletions

View File

@ -272,6 +272,48 @@ namespace FreeSql.Internal
break;
}
}
if (colattr.MapType == typeof(byte[]) && colattr.StringLength != 0)
{
int strlen = colattr.StringLength;
var charPatten = @"(VARBINARY|BINARY|BYTEA)\s*(\([^\)]*\))?";
switch (common._orm.Ado.DataType)
{
case DataType.MySql:
case DataType.OdbcMySql:
if (strlen == -2) colattr.DbType = "LONGBLOB";
else if (strlen < 0) colattr.DbType = "BLOB";
else colattr.DbType = Regex.Replace(colattr.DbType, charPatten, $"$1({strlen})");
break;
case DataType.SqlServer:
case DataType.OdbcSqlServer:
if (strlen < 0) colattr.DbType = Regex.Replace(colattr.DbType, charPatten, $"$1(MAX)");
else colattr.DbType = Regex.Replace(colattr.DbType, charPatten, $"$1({strlen})");
break;
case DataType.PostgreSQL:
case DataType.OdbcPostgreSQL:
case DataType.OdbcKingbaseES:
case DataType.ShenTong: //驱动引发的异常:“System.Data.OscarClient.OscarException”(位于 System.Data.OscarClient.dll 中)
colattr.DbType = "BYTEA"; //变长二进制串
break;
case DataType.Oracle:
colattr.DbType = "BLOB";
break;
case DataType.Dameng:
colattr.DbType = "BLOB";
break;
case DataType.OdbcOracle:
case DataType.OdbcDameng:
colattr.DbType = "BLOB";
break;
case DataType.Sqlite:
colattr.DbType = "BLOB";
break;
case DataType.MsAccess:
if (strlen < 0) colattr.DbType = "BLOB";
else colattr.DbType = Regex.Replace(colattr.DbType, charPatten, $"$1({strlen})");
break;
}
}
if (trytb.Columns.ContainsKey(colattr.Name)) throw new Exception($"ColumnAttribute.Name {colattr.Name} 重复存在,请检查(注意:不区分大小写)");
if (trytb.ColumnsByCs.ContainsKey(p.Name)) throw new Exception($"属性名 {p.Name} 重复存在,请检查(注意:不区分大小写)");