From 1c6679603826da7496c0697a05631098ae8ad0b6 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Thu, 31 Jan 2019 15:52:47 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BD=BF=E7=94=A8=20virtual?= =?UTF-8?q?=20=E5=90=8E=E5=AE=9E=E4=BD=93=E5=BA=8F=E5=88=97=E5=8C=96?= =?UTF-8?q?=E9=97=AE=E9=A2=98=20#5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FreeSql.Tests/Sqlite/Curd/SqliteSelectTest.cs | 41 +++++++++++++++++++ FreeSql/Internal/UtilsExpressionTree.cs | 4 +- 2 files changed, 43 insertions(+), 2 deletions(-) diff --git a/FreeSql.Tests/Sqlite/Curd/SqliteSelectTest.cs b/FreeSql.Tests/Sqlite/Curd/SqliteSelectTest.cs index 8d2836e1..01076fb1 100644 --- a/FreeSql.Tests/Sqlite/Curd/SqliteSelectTest.cs +++ b/FreeSql.Tests/Sqlite/Curd/SqliteSelectTest.cs @@ -32,6 +32,47 @@ namespace FreeSql.Tests.Sqlite { public List Types { get; set; } } + public partial class Song { + [Column(IsIdentity = true)] + public int Id { get; set; } + public DateTime? Create_time { get; set; } + public bool? Is_deleted { get; set; } + public string Title { get; set; } + public string Url { get; set; } + + public virtual ICollection Tags { get; set; } + } + public partial class Song_tag { + public int Song_id { get; set; } + public virtual Song Song { get; set; } + + public int Tag_id { get; set; } + public virtual Tag Tag { get; set; } + } + public partial class Tag { + [Column(IsIdentity = true)] + public int Id { get; set; } + public int? Parent_id { get; set; } + public virtual Tag Parent { get; set; } + + public decimal? Ddd { get; set; } + public string Name { get; set; } + + public virtual ICollection Songs { get; set; } + public virtual ICollection Tags { get; set; } + } + + [Fact] + public void Lazy() { + var tags = g.sqlite.Select().Where(a => a.Parent.Name == "xxx") + .LeftJoin(a => a.Parent_id == a.Parent.Id) + .ToSql(); + + var songs = g.sqlite.Select().Limit(10).ToList(); + + + } + [Fact] public void ToList() { } diff --git a/FreeSql/Internal/UtilsExpressionTree.cs b/FreeSql/Internal/UtilsExpressionTree.cs index f8ce0e81..559ad436 100644 --- a/FreeSql/Internal/UtilsExpressionTree.cs +++ b/FreeSql/Internal/UtilsExpressionTree.cs @@ -122,7 +122,7 @@ namespace FreeSql.Internal { .AppendLine("using Newtonsoft.Json;") .AppendLine() .Append("public class ").Append(trytbTypeLazyName).Append(" : ").Append(trytbTypeName).AppendLine(" {") - .AppendLine(" [JsonIgnore] public IFreeSql __fsql_orm__ { get; set; }\r\n"); + .AppendLine(" [JsonIgnore] private IFreeSql __fsql_orm__ { get; set; }\r\n"); foreach (var vp in propsLazy) { var propTypeName = vp.Item1.PropertyType.IsGenericType ? @@ -430,7 +430,7 @@ namespace FreeSql.Internal { var assemly = Generator.TemplateEngin._compiler.Value.CompileCode(cscode.ToString()); var type = assemly.DefinedTypes.Where(a => a.FullName.EndsWith(trytbTypeLazyName)).FirstOrDefault(); trytb.TypeLazy = type; - trytb.TypeLazySetOrm = type.GetProperty("__fsql_orm__").GetSetMethod(); + trytb.TypeLazySetOrm = type.GetProperty("__fsql_orm__", BindingFlags.Instance | BindingFlags.NonPublic).GetSetMethod(true); } } #endregion