diff --git a/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj b/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj index 6e0c035c..eefa3548 100644 --- a/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj +++ b/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj @@ -2,7 +2,7 @@ netstandard2.0 - 0.6.1 + 0.6.2 true YeXiangQin FreeSql 扩展包,可实现【延时加载】属性. @@ -20,7 +20,7 @@ - + diff --git a/FreeSql.sln b/FreeSql.sln index c3d37c4a..024df11f 100644 --- a/FreeSql.sln +++ b/FreeSql.sln @@ -30,15 +30,17 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FreeSql.Provider.MySql", "P EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FreeSql.Provider.Oracle", "Providers\FreeSql.Provider.Oracle\FreeSql.Provider.Oracle.csproj", "{3DE45286-B0DB-4D74-B322-F5467FB2EF53}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FreeSql.Provider.Sqlite", "Providers\FreeSql.Provider.Sqlite\FreeSql.Provider.Sqlite.csproj", "{559B6369-1868-4A06-A590-F80BA7B80A1B}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FreeSql.Provider.Sqlite", "Providers\FreeSql.Provider.Sqlite\FreeSql.Provider.Sqlite.csproj", "{559B6369-1868-4A06-A590-F80BA7B80A1B}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FreeSql.Provider.SqlServer", "Providers\FreeSql.Provider.SqlServer\FreeSql.Provider.SqlServer.csproj", "{B61AAC9E-59E9-4F47-BBE3-97AC24112EFE}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FreeSql.Provider.SqlServer", "Providers\FreeSql.Provider.SqlServer\FreeSql.Provider.SqlServer.csproj", "{B61AAC9E-59E9-4F47-BBE3-97AC24112EFE}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FreeSql.Provider.PostgreSQL", "Providers\FreeSql.Provider.PostgreSQL\FreeSql.Provider.PostgreSQL.csproj", "{22C0B061-F7CC-4A7F-AEC7-D4DBBE6B23B2}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FreeSql.Provider.PostgreSQL", "Providers\FreeSql.Provider.PostgreSQL\FreeSql.Provider.PostgreSQL.csproj", "{22C0B061-F7CC-4A7F-AEC7-D4DBBE6B23B2}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Extensions", "Extensions", "{4A92E8A6-9A6D-41A1-9CDA-DE10899648AA}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FreeSql.Extensions.LazyLoading", "Extensions\FreeSql.Extensions.LazyLoading\FreeSql.Extensions.LazyLoading.csproj", "{1FE00D5E-EC0F-4238-93EC-DABA26DBD1A9}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FreeSql.Extensions.LazyLoading", "Extensions\FreeSql.Extensions.LazyLoading\FreeSql.Extensions.LazyLoading.csproj", "{1FE00D5E-EC0F-4238-93EC-DABA26DBD1A9}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FreeSql.Provider.MySqlConnector", "Providers\FreeSql.Provider.MySqlConnector\FreeSql.Provider.MySqlConnector.csproj", "{D2A41321-5E84-410B-B25C-3AA122D4CA27}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -206,6 +208,18 @@ Global {1FE00D5E-EC0F-4238-93EC-DABA26DBD1A9}.Release|x64.Build.0 = Release|Any CPU {1FE00D5E-EC0F-4238-93EC-DABA26DBD1A9}.Release|x86.ActiveCfg = Release|Any CPU {1FE00D5E-EC0F-4238-93EC-DABA26DBD1A9}.Release|x86.Build.0 = Release|Any CPU + {D2A41321-5E84-410B-B25C-3AA122D4CA27}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D2A41321-5E84-410B-B25C-3AA122D4CA27}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D2A41321-5E84-410B-B25C-3AA122D4CA27}.Debug|x64.ActiveCfg = Debug|Any CPU + {D2A41321-5E84-410B-B25C-3AA122D4CA27}.Debug|x64.Build.0 = Debug|Any CPU + {D2A41321-5E84-410B-B25C-3AA122D4CA27}.Debug|x86.ActiveCfg = Debug|Any CPU + {D2A41321-5E84-410B-B25C-3AA122D4CA27}.Debug|x86.Build.0 = Debug|Any CPU + {D2A41321-5E84-410B-B25C-3AA122D4CA27}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D2A41321-5E84-410B-B25C-3AA122D4CA27}.Release|Any CPU.Build.0 = Release|Any CPU + {D2A41321-5E84-410B-B25C-3AA122D4CA27}.Release|x64.ActiveCfg = Release|Any CPU + {D2A41321-5E84-410B-B25C-3AA122D4CA27}.Release|x64.Build.0 = Release|Any CPU + {D2A41321-5E84-410B-B25C-3AA122D4CA27}.Release|x86.ActiveCfg = Release|Any CPU + {D2A41321-5E84-410B-B25C-3AA122D4CA27}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -221,6 +235,7 @@ Global {B61AAC9E-59E9-4F47-BBE3-97AC24112EFE} = {2A381C57-2697-427B-9F10-55DA11FD02E4} {22C0B061-F7CC-4A7F-AEC7-D4DBBE6B23B2} = {2A381C57-2697-427B-9F10-55DA11FD02E4} {1FE00D5E-EC0F-4238-93EC-DABA26DBD1A9} = {4A92E8A6-9A6D-41A1-9CDA-DE10899648AA} + {D2A41321-5E84-410B-B25C-3AA122D4CA27} = {2A381C57-2697-427B-9F10-55DA11FD02E4} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {089687FD-5D25-40AB-BA8A-A10D1E137F98} diff --git a/FreeSql/FreeSql.csproj b/FreeSql/FreeSql.csproj index 5fb7079e..b8342ba7 100644 --- a/FreeSql/FreeSql.csproj +++ b/FreeSql/FreeSql.csproj @@ -1,8 +1,8 @@  - netstandard2.0 - 0.6.1 + netstandard2.0;net45 + 0.6.2 true YeXiangQin FreeSql is the most convenient ORM in dotnet. It supports Mysql, Postgresql, SqlServer, Oracle and Sqlite. @@ -23,7 +23,8 @@ - + + diff --git a/FreeSql/FreeSqlBuilder.cs b/FreeSql/FreeSqlBuilder.cs index f9875fd8..9ce5494c 100644 --- a/FreeSql/FreeSqlBuilder.cs +++ b/FreeSql/FreeSqlBuilder.cs @@ -108,6 +108,7 @@ namespace FreeSql { switch(_dataType) { case DataType.MySql: type = Type.GetType("FreeSql.MySql.MySqlProvider`1,FreeSql.Provider.MySql")?.MakeGenericType(typeof(TMark)); + if (type == null) type = Type.GetType("FreeSql.MySql.MySqlProvider`1,FreeSql.Provider.MySqlConnector")?.MakeGenericType(typeof(TMark)); if (type == null) throw new Exception("缺少 FreeSql 数据库实现包:FreeSql.Provider.MySql.dll,可前往 nuget 下载"); break; case DataType.SqlServer: type = Type.GetType("FreeSql.SqlServer.SqlServerProvider`1,FreeSql.Provider.SqlServer")?.MakeGenericType(typeof(TMark)); diff --git a/FreeSql/Internal/CommonProvider/AdoProvider/AdoProviderAsync.cs b/FreeSql/Internal/CommonProvider/AdoProvider/AdoProviderAsync.cs index 7b711256..956ac42b 100644 --- a/FreeSql/Internal/CommonProvider/AdoProvider/AdoProviderAsync.cs +++ b/FreeSql/Internal/CommonProvider/AdoProvider/AdoProviderAsync.cs @@ -34,7 +34,7 @@ namespace FreeSql.Internal.CommonProvider { flag = sbflag.ToString(); } ret.Add((T)Utils.ExecuteArrayRowReadClassOrTuple(flag, type, indexes, dr, 0, _util).Value); - return Task.CompletedTask; + return Task.FromResult(false); }, cmdType, cmdText, cmdParms); return ret; } @@ -88,7 +88,7 @@ namespace FreeSql.Internal.CommonProvider { ret2.Add((T2)Utils.ExecuteArrayRowReadClassOrTuple(flag2, type2, indexes2, dr, 0, _util).Value); break; } - return Task.CompletedTask; + return Task.FromResult(false); }, cmdType, cmdText, cmdParms); return (ret1, ret2); } @@ -162,7 +162,7 @@ namespace FreeSql.Internal.CommonProvider { ret3.Add((T3)Utils.ExecuteArrayRowReadClassOrTuple(flag3, type3, indexes3, dr, 0, _util).Value); break; } - return Task.CompletedTask; + return Task.FromResult(false); }, cmdType, cmdText, cmdParms); return (ret1, ret2, ret3); } @@ -256,7 +256,7 @@ namespace FreeSql.Internal.CommonProvider { ret4.Add((T4)Utils.ExecuteArrayRowReadClassOrTuple(flag4, type4, indexes4, dr, 0, _util).Value); break; } - return Task.CompletedTask; + return Task.FromResult(false); }, cmdType, cmdText, cmdParms); return (ret1, ret2, ret3, ret4); } @@ -370,7 +370,7 @@ namespace FreeSql.Internal.CommonProvider { ret5.Add((T5)Utils.ExecuteArrayRowReadClassOrTuple(flag5, type5, indexes5, dr, 0, _util).Value); break; } - return Task.CompletedTask; + return Task.FromResult(false); }, cmdType, cmdText, cmdParms); return (ret1, ret2, ret3, ret4, ret5); } diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs index 1e8159f5..9a7fe7c5 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs @@ -285,7 +285,7 @@ namespace FreeSql.Internal.CommonProvider { await _orm.Ado.ExecuteReaderAsync(_connection, _transaction, dr => { var read = Utils.ExecuteArrayRowReadClassOrTuple(flagStr, type, null, dr, 0, _commonUtils); ret.Add((TTuple)read.Value); - return Task.CompletedTask; + return Task.FromResult(false); }, CommandType.Text, sql, dbParms); } catch (Exception ex) { exception = ex; @@ -337,7 +337,7 @@ namespace FreeSql.Internal.CommonProvider { foreach (var other in otherData) other.retlist.Add(_commonExpression.ReadAnonymous(other.read, dr, ref idx, false)); } - return Task.CompletedTask; + return Task.FromResult(false); }, CommandType.Text, sql, dbParms); } catch (Exception ex) { exception = ex; @@ -431,7 +431,7 @@ namespace FreeSql.Internal.CommonProvider { await _orm.Ado.ExecuteReaderAsync(_connection, _transaction, dr => { var index = -1; ret.Add((TReturn)_commonExpression.ReadAnonymous(af.map, dr, ref index, false)); - return Task.CompletedTask; + return Task.FromResult(false); }, CommandType.Text, sql, dbParms); } catch (Exception ex) { exception = ex; diff --git a/FreeSql/Internal/UtilsExpressionTree.cs b/FreeSql/Internal/UtilsExpressionTree.cs index 6de5c976..f439171c 100644 --- a/FreeSql/Internal/UtilsExpressionTree.cs +++ b/FreeSql/Internal/UtilsExpressionTree.cs @@ -83,7 +83,12 @@ namespace FreeSql.Internal { }; if (colattr._IsNullable == null) colattr._IsNullable = tp?.isnullable; if (string.IsNullOrEmpty(colattr.DbType)) colattr.DbType = tp?.dbtypeFull ?? "varchar(255)"; - colattr.DbType = colattr.DbType.ToUpper(); + if (colattr.DbType.StartsWith("set(") || colattr.DbType.StartsWith("enum(")) { + var leftBt = colattr.DbType.IndexOf('('); + colattr.DbType = colattr.DbType.Substring(0, leftBt).ToUpper() + colattr.DbType.Substring(leftBt); + } + else + colattr.DbType = colattr.DbType.ToUpper(); if (tp != null && tp.Value.isnullable == null) colattr.IsNullable = tp.Value.dbtypeFull.Contains("NOT NULL") == false; if (colattr.DbType?.Contains("NOT NULL") == true) colattr.IsNullable = false; @@ -1164,7 +1169,14 @@ namespace FreeSql.Internal { } var typeOrg = type; if (type.IsNullableType()) type = type.GenericTypeArguments.First(); - if (type.IsEnum) return Expression.Return(returnTarget, Expression.Call(MethodEnumParse, Expression.Constant(type, typeof(Type)), Expression.Call(MethodToString, valueExp), Expression.Constant(true, typeof(bool)))); + if (type.IsEnum) + return Expression.Block( + Expression.IfThenElse( + Expression.Equal(Expression.TypeAs(valueExp, typeof(string)), Expression.Constant(string.Empty)), + Expression.Return(returnTarget, Expression.Convert(Expression.Default(type), typeof(object))), + Expression.Return(returnTarget, Expression.Call(MethodEnumParse, Expression.Constant(type, typeof(Type)), Expression.Call(MethodToString, valueExp), Expression.Constant(true, typeof(bool)))) + ) + ); Expression tryparseExp = null; Expression tryparseBooleanExp = null; ParameterExpression tryparseVarExp = null; diff --git a/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj b/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj index 224fc15a..65e13c74 100644 --- a/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj +++ b/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj @@ -1,8 +1,8 @@  - netstandard2.0 - 0.6.1 + netstandard2.0;net452 + 0.6.2 true YeXiangQin FreeSql 数据库实现,基于 MySql 5.6 @@ -18,7 +18,7 @@ - + diff --git a/Providers/FreeSql.Provider.MySqlConnector/Class1.cs b/Providers/FreeSql.Provider.MySqlConnector/Class1.cs new file mode 100644 index 00000000..e855068e --- /dev/null +++ b/Providers/FreeSql.Provider.MySqlConnector/Class1.cs @@ -0,0 +1,6 @@ +using System; + +namespace FreeSql.Provider.MySqlConnector { + public class Class1 { + } +} diff --git a/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj b/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj new file mode 100644 index 00000000..ed132945 --- /dev/null +++ b/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj @@ -0,0 +1,32 @@ + + + + netstandard2.0;net45 + 0.6.2 + true + YeXiangQin + FreeSql 数据库实现,基于 MySql 5.6 + https://github.com/2881099/FreeSql + https://github.com/2881099/FreeSql + git + MIT + FreeSql;ORM + $(AssemblyName) + $(AssemblyName) + true + true + + + + + + + + + + + + + + + diff --git a/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj b/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj index a839d7ce..7244b7c9 100644 --- a/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj +++ b/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj @@ -1,8 +1,8 @@  - netstandard2.0 - 0.6.1 + netstandard2.0;net45 + 0.6.2 true YeXiangQin FreeSql 数据库实现,基于 Oracle 11 @@ -16,9 +16,13 @@ true true - - - + + + + + + + diff --git a/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj b/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj index e99f8ff0..9561f1a8 100644 --- a/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj +++ b/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj @@ -1,8 +1,8 @@  - netstandard2.0 - 0.6.1 + netstandard2.0;net45 + 0.6.2 true YeXiangQin FreeSql 数据库实现,基于 PostgreSQL 9.5 @@ -18,10 +18,11 @@ - - + + + diff --git a/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj b/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj index a8e7a825..302cf2c7 100644 --- a/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj +++ b/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj @@ -1,8 +1,8 @@  - netstandard2.0 - 0.6.1 + netstandard2.0;net451 + 0.6.2 true YeXiangQin FreeSql 数据库实现,基于 SqlServer 2005+,并根据版本适配分页方法:row_number 或 offset fetch next @@ -16,11 +16,12 @@ true true - + - + + diff --git a/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj b/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj index 66086d68..6be75fce 100644 --- a/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj +++ b/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj @@ -1,8 +1,8 @@  - netstandard2.0 - 0.6.1 + netstandard2.0;net45 + 0.6.2 true YeXiangQin FreeSql 数据库实现,基于 Sqlite 3.0 @@ -18,7 +18,7 @@ - + diff --git a/readme.md b/readme.md index 3778bcdc..2fc9d1e7 100644 --- a/readme.md +++ b/readme.md @@ -31,16 +31,21 @@ FreeSql 是一个功能强大的 .NETStandard 库,用于对象关系映射程 | [FreeSql.AdminLTE](https://github.com/2881099/FreeSql.AdminLTE) | [![nuget](https://img.shields.io/nuget/v/FreeSql.AdminLTE.svg?style=flat-square)](https://www.nuget.org/packages/FreeSql.AdminLTE) | [![stats](https://img.shields.io/nuget/dt/FreeSql.AdminLTE.svg?style=flat-square)](https://www.nuget.org/stats/packages/FreeSql.AdminLTE?groupby=Version) | | [FreeSql.Connection.Extensions](https://github.com/2881099/FreeSql.Connection.Extensions) | [![nuget](https://img.shields.io/nuget/v/FreeSql.Connection.Extensions.svg?style=flat-square)](https://www.nuget.org/packages/FreeSql.Connection.Extensions) | [![stats](https://img.shields.io/nuget/dt/FreeSql.Connection.Extensions.svg?style=flat-square)](https://www.nuget.org/stats/packages/FreeSql.Connection.Extensions?groupby=Version) | +- FreeSql 是核心,提供原始用法; +- FreeSql.DbContext 是扩展包,提供面向对象的用法(像EF); +- FreeSql.Repository 也是扩展包,提供仓储+工作单元用法; +- FreeSql.Connection.Extensions 也是扩展包,提供像 Dapper 一样的用法; + # Providers -| Package Name | NuGet | Downloads | -|--------------| ------- | ---- | -| FreeSql.Provider.MySql | [![nuget](https://img.shields.io/nuget/v/FreeSql.Provider.MySql.svg?style=flat-square)](https://www.nuget.org/packages/FreeSql.Provider.MySql) | [![stats](https://img.shields.io/nuget/dt/FreeSql.Provider.MySql.svg?style=flat-square)](https://www.nuget.org/stats/packages/FreeSql.Provider.MySql?groupby=Version) | -| FreeSql.Provider.PostgreSQL | [![nuget](https://img.shields.io/nuget/v/FreeSql.Provider.PostgreSQL.svg?style=flat-square)](https://www.nuget.org/packages/FreeSql.Provider.PostgreSQL) | [![stats](https://img.shields.io/nuget/dt/FreeSql.Provider.PostgreSQL.svg?style=flat-square)](https://www.nuget.org/stats/packages/FreeSql.Provider.PostgreSQL?groupby=Version) | -| FreeSql.Provider.SqlServer | [![nuget](https://img.shields.io/nuget/v/FreeSql.Provider.SqlServer.svg?style=flat-square)](https://www.nuget.org/packages/FreeSql.Provider.SqlServer) | [![stats](https://img.shields.io/nuget/dt/FreeSql.Provider.SqlServer.svg?style=flat-square)](https://www.nuget.org/stats/packages/FreeSql.Provider.SqlServer?groupby=Version) | -| FreeSql.Provider.Sqlite | [![nuget](https://img.shields.io/nuget/v/FreeSql.Provider.Sqlite.svg?style=flat-square)](https://www.nuget.org/packages/FreeSql.Provider.Sqlite) | [![stats](https://img.shields.io/nuget/dt/FreeSql.Provider.MySqliteSql.svg?style=flat-square)](https://www.nuget.org/stats/packages/FreeSql.Provider.Sqlite?groupby=Version) | -| FreeSql.Provider.Oracle | [![nuget](https://img.shields.io/nuget/v/FreeSql.Provider.Oracle.svg?style=flat-square)](https://www.nuget.org/packages/FreeSql.Provider.Oracle) | [![stats](https://img.shields.io/nuget/dt/FreeSql.Provider.Oracle.svg?style=flat-square)](https://www.nuget.org/stats/packages/FreeSql.Provider.Oracle?groupby=Version) | -| FreeSql.Extensions.LazyLoading | [![nuget](https://img.shields.io/nuget/v/FreeSql.Extensions.LazyLoading.svg?style=flat-square)](https://www.nuget.org/packages/FreeSql.Extensions.LazyLoading) | [![stats](https://img.shields.io/nuget/dt/FreeSql.Extensions.LazyLoading.svg?style=flat-square)](https://www.nuget.org/stats/packages/FreeSql.Extensions.LazyLoading?groupby=Version) | +| Package Name | Version | +|--------------| ------- | +| FreeSql.Provider.MySql | NETStandard2.0、net452 | +| FreeSql.Provider.PostgreSQL | NETStandard2.0、net45 | +| FreeSql.Provider.SqlServer | NETStandard2.0、net451 | +| FreeSql.Provider.Sqlite | NETStandard2.0、net45 | +| FreeSql.Provider.Oracle | NETStandard2.0、net45 | +| FreeSql.Extensions.LazyLoading | NETStandard2.0 | # Quick start @@ -132,11 +137,6 @@ var t5 = fsql.Select() ``` 更多前往Wiki:[《表达式函数》](https://github.com/2881099/FreeSql/wiki/%e8%a1%a8%e8%be%be%e5%bc%8f%e5%87%bd%e6%95%b0) -- IFreeSql 是核心,提供原始用法; -- FreeSql.DbContext 是扩展包,提供面向对象的用法(像EF); -- FreeSql.Repository 也是扩展包,提供仓储+工作单元用法(实际上和 DbContext 是一个扩展包); -- FreeSql.Connection.Extensions 也是扩展包,提供像 Dapper 一样的用法; - # Repository & UnitOfWork > dotnet add package FreeSql.Repository