- 修复 Sqlite Attachs 多库索引 {tablename} 问题;

This commit is contained in:
2881099 2022-11-04 21:36:42 +08:00
parent 974eb0b189
commit 2ae4d138ec
2 changed files with 21 additions and 3 deletions

View File

@ -351,6 +351,15 @@ namespace base_entity
public int aa { get; set; } public int aa { get; set; }
} }
[Table(Name = "db2.sql_AAA_attr")]
[Index("{tablename}_xxx1", nameof(aa))]
[Index("{tablename}_xxx2", nameof(aa))]
public class SqliteAAA
{
[Column(Name = "aa_attr")]
public int aa { get; set; }
}
public class JoinConditionAttribute : Attribute public class JoinConditionAttribute : Attribute
{ {
public string Condition { get; set; } public string Condition { get; set; }
@ -389,6 +398,7 @@ namespace base_entity
.UseConnectionString(FreeSql.DataType.Sqlite, "data source=:memory:") .UseConnectionString(FreeSql.DataType.Sqlite, "data source=:memory:")
//.UseConnectionString(DataType.Sqlite, "data source=db1.db;attachs=db2.db")
//.UseSlave("data source=test1.db", "data source=test2.db", "data source=test3.db", "data source=test4.db") //.UseSlave("data source=test1.db", "data source=test2.db", "data source=test3.db", "data source=test4.db")
//.UseSlaveWeight(10, 1, 1, 5) //.UseSlaveWeight(10, 1, 1, 5)
@ -429,6 +439,14 @@ namespace base_entity
BaseEntity.Initialization(fsql, () => _asyncUow.Value); BaseEntity.Initialization(fsql, () => _asyncUow.Value);
#endregion #endregion
//fsql.CodeFirst.SyncStructure<SqliteAAA>();
fsql.CodeFirst.Entity<JoinTest01>(a => a.Property(p => p.code).IsRequired());
var repo1010 = fsql.GetRepository<JoinTest01>();
var jtitem = new JoinTest01 { id = 100 };
repo1010.Attach(jtitem);
jtitem.name = "name01";
repo1010.Update(jtitem);
var sqlt0a1 = fsql.InsertOrUpdate<>() var sqlt0a1 = fsql.InsertOrUpdate<>()
.SetSource(new .SetSource(new

View File

@ -136,7 +136,7 @@ namespace FreeSql.Sqlite
{ {
sb.Append("CREATE "); sb.Append("CREATE ");
if (uk.IsUnique) sb.Append("UNIQUE "); if (uk.IsUnique) sb.Append("UNIQUE ");
sb.Append("INDEX ").Append(_commonUtils.QuoteSqlName(ReplaceIndexName(uk.Name, tbname[1]))).Append(" ON ").Append(tbname[1]).Append("("); sb.Append("INDEX ").Append(_commonUtils.QuoteSqlName(tbname[0], ReplaceIndexName(uk.Name, tbname[1]))).Append(" ON ").Append(tbname[1]).Append("(");
foreach (var tbcol in uk.Columns) foreach (var tbcol in uk.Columns)
{ {
sb.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name)); sb.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name));
@ -213,7 +213,7 @@ namespace FreeSql.Sqlite
{ {
if (string.Concat(dbIndex[3]) == "pk") continue; if (string.Concat(dbIndex[3]) == "pk") continue;
var dbIndexesColumns = _orm.Ado.ExecuteArray(CommandType.Text, $"PRAGMA {_commonUtils.QuoteSqlName(tbtmp[0])}.INDEX_INFO({dbIndex[1]})"); var dbIndexesColumns = _orm.Ado.ExecuteArray(CommandType.Text, $"PRAGMA {_commonUtils.QuoteSqlName(tbtmp[0])}.INDEX_INFO({dbIndex[1]})");
var dbIndexesSql = string.Concat(_orm.Ado.ExecuteScalar(CommandType.Text, $" SELECT sql FROM sqlite_master WHERE name = '{dbIndex[1]}'")); var dbIndexesSql = string.Concat(_orm.Ado.ExecuteScalar(CommandType.Text, $" SELECT sql FROM {_commonUtils.QuoteSqlName(tbtmp[0])}.sqlite_master WHERE name = '{dbIndex[1]}'"));
foreach (var dbcolumn in dbIndexesColumns) foreach (var dbcolumn in dbIndexesColumns)
{ {
var dbcolumnName = string.Concat(dbcolumn[2]); var dbcolumnName = string.Concat(dbcolumn[2]);
@ -292,7 +292,7 @@ namespace FreeSql.Sqlite
{ {
sb.Append("CREATE "); sb.Append("CREATE ");
if (uk.IsUnique) sb.Append("UNIQUE "); if (uk.IsUnique) sb.Append("UNIQUE ");
sb.Append("INDEX ").Append(_commonUtils.QuoteSqlName(ReplaceIndexName(uk.Name, tbname[1]))).Append(" ON \"").Append(tablenameOnlyTb).Append("\"("); sb.Append("INDEX ").Append(_commonUtils.QuoteSqlName(tbname[0], ReplaceIndexName(uk.Name, tbname[1]))).Append(" ON \"").Append(tablenameOnlyTb).Append("\"(");
foreach (var tbcol in uk.Columns) foreach (var tbcol in uk.Columns)
{ {
sb.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name)); sb.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name));