mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-06-19 12:28:15 +08:00
- 修改 IncludeMany ManyToMany ET 缓存的 bug;
- 完善 IncludeMany 联合键处理; - 完善 Include/IncludeMany 单元测试; - 修复 Include 延时加载 ManyToOne/OneToOne,当值为 null 时,仍然会查询一次数据;
This commit is contained in:
@ -763,7 +763,69 @@ namespace FreeSql.Tests.Sqlite {
|
||||
}
|
||||
[Fact]
|
||||
public void Include_OneToChilds() {
|
||||
var tag1 = new Tag {
|
||||
Ddd = DateTime.Now.Second,
|
||||
Name = "test_oneToChilds_01_中国"
|
||||
};
|
||||
tag1.Id = (int)g.sqlite.Insert(tag1).ExecuteIdentity();
|
||||
var tag1_1 = new Tag {
|
||||
Parent_id = tag1.Id,
|
||||
Ddd = DateTime.Now.Second,
|
||||
Name = "test_oneToChilds_01_北京"
|
||||
};
|
||||
tag1_1.Id = (int)g.sqlite.Insert(tag1_1).ExecuteIdentity();
|
||||
var tag1_2 = new Tag {
|
||||
Parent_id = tag1.Id,
|
||||
Ddd = DateTime.Now.Second,
|
||||
Name = "test_oneToChilds_01_上海"
|
||||
};
|
||||
tag1_2.Id = (int)g.sqlite.Insert(tag1_2).ExecuteIdentity();
|
||||
|
||||
var tag2 = new Tag {
|
||||
Ddd = DateTime.Now.Second,
|
||||
Name = "test_oneToChilds_02_美国"
|
||||
};
|
||||
tag2.Id = (int)g.sqlite.Insert(tag2).ExecuteIdentity();
|
||||
var tag2_1 = new Tag {
|
||||
Parent_id = tag2.Id,
|
||||
Ddd = DateTime.Now.Second,
|
||||
Name = "test_oneToChilds_02_纽约"
|
||||
};
|
||||
tag2_1.Id = (int)g.sqlite.Insert(tag2_1).ExecuteIdentity();
|
||||
var tag2_2 = new Tag {
|
||||
Parent_id = tag2.Id,
|
||||
Ddd = DateTime.Now.Second,
|
||||
Name = "test_oneToChilds_02_华盛顿"
|
||||
};
|
||||
tag2_2.Id = (int)g.sqlite.Insert(tag2_2).ExecuteIdentity();
|
||||
|
||||
var tags0 = g.sqlite.Select<Tag>()
|
||||
.Include(a => a.Parent)
|
||||
.Where(a => a.Id == tag1.Id || a.Id == tag2.Id)
|
||||
.ToList();
|
||||
|
||||
var tags = g.sqlite.Select<Tag>()
|
||||
.IncludeMany(a => a.Tags)
|
||||
.Include(a => a.Parent)
|
||||
.IncludeMany(a => a.Songs)
|
||||
.Where(a => a.Id == tag1.Id || a.Id == tag2.Id)
|
||||
.ToList();
|
||||
|
||||
var tags2 = g.sqlite.Select<Tag>()
|
||||
.IncludeMany(a => a.Tags,
|
||||
then => then.Include(a => a.Parent).IncludeMany(a => a.Songs))
|
||||
.Include(a => a.Parent)
|
||||
.IncludeMany(a => a.Songs)
|
||||
.Where(a => a.Id == tag1.Id || a.Id == tag2.Id)
|
||||
.ToList();
|
||||
|
||||
var tags3 = g.sqlite.Select<Tag>()
|
||||
.IncludeMany(a => a.Tags,
|
||||
then => then.Include(a => a.Parent).IncludeMany(a => a.Songs).IncludeMany(a => a.Tags))
|
||||
.Include(a => a.Parent)
|
||||
.IncludeMany(a => a.Songs)
|
||||
.Where(a => a.Id == tag1.Id || a.Id == tag2.Id)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
@ -813,7 +875,22 @@ namespace FreeSql.Tests.Sqlite {
|
||||
|
||||
var songs = g.sqlite.Select<Song>()
|
||||
.IncludeMany(a => a.Tags)
|
||||
.Where(a => a.Id == song1.Id || a.Id == song2.Id || a.Id == song3.Id)
|
||||
.ToList();
|
||||
Assert.Equal(3, songs.Count);
|
||||
Assert.Equal(2, songs[0].Tags.Count);
|
||||
Assert.Equal(1, songs[1].Tags.Count);
|
||||
Assert.Equal(3, songs[2].Tags.Count);
|
||||
|
||||
var songs2 = g.sqlite.Select<Song>()
|
||||
.IncludeMany(a => a.Tags,
|
||||
then => then.IncludeMany(t => t.Songs))
|
||||
.Where(a => a.Id == song1.Id || a.Id == song2.Id || a.Id == song3.Id)
|
||||
.ToList();
|
||||
Assert.Equal(3, songs2.Count);
|
||||
Assert.Equal(2, songs2[0].Tags.Count);
|
||||
Assert.Equal(1, songs2[1].Tags.Count);
|
||||
Assert.Equal(3, songs2[2].Tags.Count);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user