- 修改 IncludeMany ManyToMany ET 缓存的 bug;

- 完善 IncludeMany 联合键处理;
- 完善 Include/IncludeMany 单元测试;
- 修复 Include 延时加载 ManyToOne/OneToOne,当值为 null 时,仍然会查询一次数据;
This commit is contained in:
28810
2019-05-11 17:07:24 +08:00
parent c450176aec
commit dbfc33fef5
5 changed files with 190 additions and 61 deletions

View File

@ -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);
}
}
}