- 解决 表名名称包含点,无法进行 CRUD 的问题,由于测试的复杂性,此类情况仅支持 MySql/Sqlite CodeFirst 自动迁移;

> 注意:尽量不要使用带点的表名,只有 MySql/Sqlite 对此类表名支持 CodeFirst。但是它不影响 CRUD 功能,使用 [Table(Name = "`sys.config`")] 解决
This commit is contained in:
28810
2020-01-11 02:22:16 +08:00
parent 3fe4c54ee4
commit 994cc475c2
33 changed files with 467 additions and 214 deletions

View File

@ -27,8 +27,23 @@ namespace FreeSql.Internal
public abstract DbParameter AppendParamter(List<DbParameter> _params, string parameterName, ColumnInfo col, Type type, object value);
public abstract DbParameter[] GetDbParamtersByObject(string sql, object obj);
public abstract string FormatSql(string sql, params object[] args);
public abstract string QuoteSqlName(string name);
public abstract string QuoteSqlName(params string[] name);
public abstract string TrimQuoteSqlName(string name);
public abstract string[] SplitTableName(string name);
public static string[] GetSplitTableNames(string name, char leftQuote, char rightQuote, int size)
{
if (string.IsNullOrEmpty(name)) return null;
if (name.IndexOf(leftQuote) == -1) return name.Split(new[] { '.' }, size);
name = Regex.Replace(name,
(leftQuote == '[' ? "\\" : "") +
leftQuote + @"([^" + (rightQuote == ']' ? "\\" : "") + rightQuote + @"]+)" +
(rightQuote == ']' ? "\\" : "") +
rightQuote, m => m.Groups[1].Value.Replace('.', '?'));
var ret = name.Split(new[] { '.' }, size);
for (var a = 0; a < ret.Length; a++)
ret[a] = ret[a].Replace('?', '.');
return ret;
}
public abstract string QuoteParamterName(string name);
public abstract string IsNull(string sql, object value);
public abstract string StringConcat(string[] objs, Type[] types);