diff --git a/Examples/base_entity/Entities/Class1.cs b/Examples/base_entity/Entities/Class1.cs new file mode 100644 index 00000000..5f282702 --- /dev/null +++ b/Examples/base_entity/Entities/Class1.cs @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Examples/base_entity/Entities/User.cs b/Examples/base_entity/Entities/User.cs index 7e7d741f..3b8270ec 100644 --- a/Examples/base_entity/Entities/User.cs +++ b/Examples/base_entity/Entities/User.cs @@ -31,7 +31,7 @@ public class User1 : BaseEntity public int GroupId { get; set; } public UserGroup Group { get; set; } - public List Roles { get; set; } + public virtual List Roles { get; set; } /// /// 登陆名 diff --git a/Examples/base_entity/Program.cs b/Examples/base_entity/Program.cs index 6f43a2e8..146f9603 100644 --- a/Examples/base_entity/Program.cs +++ b/Examples/base_entity/Program.cs @@ -44,10 +44,13 @@ namespace base_entity .UseConnectionString(FreeSql.DataType.Sqlite, "data source=test.db;max pool size=5") //.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=2") .UseConnectionString(FreeSql.DataType.SqlServer, "Data Source=.;Integrated Security=True;Initial Catalog=freesqlTest;Pooling=true;Max Pool Size=3") + .UseLazyLoading(true) .Build(); BaseEntity.Initialization(fsql); #endregion + var us = User1.Select.Limit(10).ToList(); + new Products { title = "product-1" }.Save(); new Products { title = "product-2" }.Save(); new Products { title = "product-3" }.Save(); diff --git a/Examples/base_entity/base_entity.csproj b/Examples/base_entity/base_entity.csproj index 7289cf02..c912bae3 100644 --- a/Examples/base_entity/base_entity.csproj +++ b/Examples/base_entity/base_entity.csproj @@ -17,6 +17,7 @@ + diff --git a/Examples/orm_vs_net40/Program.cs b/Examples/orm_vs_net40/Program.cs index e3f572cb..66cd43ef 100644 --- a/Examples/orm_vs_net40/Program.cs +++ b/Examples/orm_vs_net40/Program.cs @@ -35,13 +35,6 @@ namespace orm_vs static void Main(string[] args) { - var testlist1 = fsql.Select().OrderBy(a => a.Id).ToList(); - var testlist2 = new List(); - fsql.Select().OrderBy(a => a.Id).ToChunk(0, list => - { - testlist2.AddRange(list); - }); - fsql.CodeFirst.SyncStructure(typeof(Song), typeof(Song_tag), typeof(Tag)); //sugar.CodeFirst.InitTables(typeof(Song), typeof(Song_tag), typeof(Tag)); //sugar创建表失败:SqlSugar.SqlSugarException: Sequence contains no elements diff --git a/Extensions/FreeSql.Extensions.BaseEntity/BaseEntity 纯净版源码(.Net 4.0).zip b/Extensions/FreeSql.Extensions.BaseEntity/BaseEntity 纯净版源码(.Net 4.0).zip index 11ac0871..6a90cb18 100644 Binary files a/Extensions/FreeSql.Extensions.BaseEntity/BaseEntity 纯净版源码(.Net 4.0).zip and b/Extensions/FreeSql.Extensions.BaseEntity/BaseEntity 纯净版源码(.Net 4.0).zip differ diff --git a/Extensions/FreeSql.Extensions.LazyLoading/LazyLoadingComplier.cs b/Extensions/FreeSql.Extensions.LazyLoading/LazyLoadingComplier.cs index dc388bf4..903d31ce 100644 --- a/Extensions/FreeSql.Extensions.LazyLoading/LazyLoadingComplier.cs +++ b/Extensions/FreeSql.Extensions.LazyLoading/LazyLoadingComplier.cs @@ -1,9 +1,7 @@ -using Microsoft.CSharp; -using System; +using System; using System.CodeDom.Compiler; -using System.Collections.Generic; +using System.IO; using System.Reflection; -using System.Text; namespace FreeSql.Extensions.LazyLoading { @@ -14,7 +12,7 @@ namespace FreeSql.Extensions.LazyLoading #if ns20 internal static Lazy _compiler = new Lazy(() => { - //var dlls = Directory.GetFiles(Directory.GetParent(Type.GetType("IFreeSql, FreeSql").Assembly.Location).FullName, "*.dll"); + //var dlls = Directory.GetFiles(Directory.GetParent(Type.GetType("IFreeSql, FreeSql").Assembly.Location).FullName, "*.dll;*.exe"); var compiler = new CSScriptLib.RoslynEvaluator(); compiler.DisableReferencingFromCode = false; //compiler.DebugBuild = true; @@ -36,14 +34,41 @@ namespace FreeSql.Extensions.LazyLoading #else - public static Assembly CompileCode(string cscode) { + public static Assembly CompileCode(string cscode) { - using (var compiler = CodeDomProvider.CreateProvider("cs")) { + var files = Directory.GetFiles(Directory.GetParent(Type.GetType("IFreeSql, FreeSql").Assembly.Location).FullName); + using (var compiler = CodeDomProvider.CreateProvider("cs")) { var objCompilerParameters = new CompilerParameters(); objCompilerParameters.ReferencedAssemblies.Add("System.dll"); + objCompilerParameters.ReferencedAssemblies.Add("System.Core.dll"); objCompilerParameters.ReferencedAssemblies.Add("FreeSql.dll"); - objCompilerParameters.GenerateExecutable = false; + foreach (var dll in files) + { + if (!dll.EndsWith(".dll", StringComparison.OrdinalIgnoreCase) && + !dll.EndsWith(".exe", StringComparison.OrdinalIgnoreCase)) continue; + + Console.WriteLine(dll); + var dllName = string.Empty; + var idx = dll.LastIndexOf('/'); + if (idx != -1) dllName = dll.Substring(idx + 1); + else + { + idx = dll.LastIndexOf('\\'); + if (idx != -1) dllName = dll.Substring(idx + 1); + } + if (string.IsNullOrEmpty(dllName)) continue; + try + { + var ass = Assembly.LoadFile(dll); + objCompilerParameters.ReferencedAssemblies.Add(dllName); + } + catch + { + + } + } + objCompilerParameters.GenerateExecutable = false; objCompilerParameters.GenerateInMemory = true; CompilerResults cr = compiler.CompileAssemblyFromSource(objCompilerParameters, cscode); diff --git a/FreeSql/Internal/UtilsExpressionTree.cs b/FreeSql/Internal/UtilsExpressionTree.cs index f122b094..c7846319 100644 --- a/FreeSql/Internal/UtilsExpressionTree.cs +++ b/FreeSql/Internal/UtilsExpressionTree.cs @@ -788,8 +788,8 @@ namespace FreeSql.Internal .Append(" if (base.").Append(pnv.Name).Append(" == null && __lazy__").Append(pnv.Name).AppendLine(" == false) {"); if (nvref.Exception == null) - cscode.Append(" base.").Append(pnv.Name).Append(" = __fsql_orm__.Select<").Append(propElementType.IsNested ? $"{propElementType.DeclaringType.Namespace}.{propElementType.DeclaringType.Name}.{propElementType.Name}" : $"{propElementType.Namespace}.{propElementType.Name}") - .Append(">().Where(a => __fsql_orm__.Select<").Append(tbmid.Type.IsNested ? $"{tbmid.Type.DeclaringType.Namespace?.NotNullAndConcat(".")}{tbmid.Type.DeclaringType.Name}.{tbmid.Type.Name}" : $"{tbmid.Type.Namespace}.{tbmid.Type.Name}") + cscode.Append(" base.").Append(pnv.Name).Append(" = __fsql_orm__.Select<").Append(propElementType.IsNested ? $"{propElementType.DeclaringType.Namespace?.NotNullAndConcat(".")}{propElementType.DeclaringType.Name}.{propElementType.Name}" : $"{propElementType.Namespace?.NotNullAndConcat(".")}{propElementType.Name}") + .Append(">().Where(a => __fsql_orm__.Select<").Append(tbmid.Type.IsNested ? $"{tbmid.Type.DeclaringType.Namespace?.NotNullAndConcat(".")}{tbmid.Type.DeclaringType.Name}.{tbmid.Type.Name}" : $"{tbmid.Type.Namespace?.NotNullAndConcat(".")}{tbmid.Type.Name}") .Append(">().Where(b => ").Append(lmbdWhere.ToString()).AppendLine(").Any()).ToList();") .Append(" __lazy__").Append(pnv.Name).AppendLine(" = true;"); else @@ -801,7 +801,9 @@ namespace FreeSql.Internal } if (vp?.Item3 == true) { //set 重写 - cscode.Append(" set => base.").Append(pnv.Name).AppendLine(" = value;"); + cscode.Append(" set {\r\n") + .Append(" base.").Append(pnv.Name).AppendLine(" = value;") + .Append(" }\r\n"); } cscode.AppendLine(" }"); } @@ -940,7 +942,9 @@ namespace FreeSql.Internal } if (vp?.Item3 == true) { //set 重写 - cscode.Append(" set => base.").Append(pnv.Name).AppendLine(" = value;"); + cscode.Append(" set {\r\n") + .Append(" base.").Append(pnv.Name).AppendLine(" = value;") + .Append(" }\r\n"); } cscode.AppendLine(" }"); }