- 修复 CodeFirst + AsTable + 自动迁移,导致索性名重复的问题 #366;

This commit is contained in:
28810
2020-07-12 12:34:55 +08:00
parent 9c3b5b15c4
commit 8c38922331
30 changed files with 157 additions and 90 deletions

View File

@ -139,13 +139,14 @@ namespace FreeSql.MsAccess
};
Action<string> createTableIndex = tn =>
{
var oldtn = tn;
tn = _commonUtils.QuoteSqlName(tn);
//创建表的索引
foreach (var uk in tb.Indexes)
{
sb.Append("CREATE ");
if (uk.IsUnique) sb.Append("UNIQUE ");
sb.Append("INDEX ").Append(_commonUtils.QuoteSqlName(uk.Name)).Append(" ON ").Append(tn).Append("(");
sb.Append("INDEX ").Append(_commonUtils.QuoteSqlName(ReplaceIndexName(uk.Name, oldtn))).Append(" ON ").Append(tn).Append("(");
foreach (var tbcol in uk.Columns)
{
sb.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name));
@ -379,7 +380,8 @@ namespace FreeSql.MsAccess
foreach (var uk in tb.Indexes)
{
if (string.IsNullOrEmpty(uk.Name) || uk.Columns.Any() == false) continue;
var dsukfind1 = dsuk.Where(a => string.Compare(a[1], uk.Name, true) == 0).ToArray();
var ukname = ReplaceIndexName(uk.Name, tbname);
var dsukfind1 = dsuk.Where(a => string.Compare(a[1], ukname, true) == 0).ToArray();
if (dsukfind1.Any() == false || dsukfind1.Length != uk.Columns.Length || dsukfind1.Where(a => (a[3] == "1") == uk.IsUnique && uk.Columns.Where(b => string.Compare(b.Column.Attribute.Name, a[0], true) == 0 && (a[2] == "1") == b.IsDesc).Any()).Count() != uk.Columns.Length)
istmpatler = true;
}