WhereCascade 多表查询时很是方便,有了它能够很轻松的完成类型软删除,租户条件的功能。html
IFreeSql fsql = new FreeSql.FreeSqlBuilder() .UseConnectionString(FreeSql.DataType.MySql, "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;Max pool size=10") .Build(); [Table(Name = "tb_topic")] class Topic { [Column(IsIdentity = true, IsPrimary = true)] public int Id { get; set; } public int Clicks { get; set; } public int TestTypeInfoGuid { get; set; } public TestTypeInfo Type { get; set; } public string Title { get; set; } public DateTime CreateTime { get; set; } } class TestTypeInfo { public int Guid { get; set; } public int ParentId { get; set; } public TestTypeParentInfo Parent { get; set; } public string Name { get; set; } public List<Topic> Topics { get; set; } } class TestTypeParentInfo { public int Id { get; set; } public string Name { get; set; } } ISelect<Topic> select => fsql.Select<Topic>();
多表查询时,像isdeleted每一个表都给条件,挺麻烦的。WhereCascade使用后生成sql时,全部表都附上这个条件。sql
如:ui
fsql.Select<t1>() .LeftJoin<t2>(...) .WhereCascade(x => x.IsDeleted == false) .ToList();
获得的 SQL:code
SELECT ... FROM t1 LEFT JOIN t2 on ... AND (t2.IsDeleted = 0) WHERE t1.IsDeleted = 0
其中的实体可附加表达式时才生效,支持子表查询。单次查询使用的表数目越多收益越大。htm
可应用范围:blog
暂时不支持【延时属性】的广播;事务
此功能和【过滤器】不一样,用于单次多表查询条件的传播;get
(一)入门string
(二十)多表查询 WhereCascade