From 9d87c69fb2c001438d3a99cbecd83c4502d23a59 Mon Sep 17 00:00:00 2001 From: 28810 <28810@YEXIANGQIN> Date: Mon, 25 Feb 2019 10:12:33 +0800 Subject: [PATCH] v0.1.3 --- FreeSql.Repository/BaseRepository.cs | 69 ++++++++++++++++--- FreeSql.Repository/FreeSql.Repository.csproj | 4 +- FreeSql.Repository/IBasicRepository.cs | 19 +++-- FreeSql.Repository/IRepository.cs | 4 +- FreeSql/FreeSql.csproj | 2 +- FreeSql/Interface/IAdo.cs | 4 ++ .../CommonProvider/AdoProvider/AdoProvider.cs | 4 +- FreeSql/MySql/MySqlAdo/MySqlAdo.cs | 4 +- FreeSql/Oracle/OracleAdo/OracleAdo.cs | 4 +- .../PostgreSQL/PostgreSQLAdo/PostgreSQLAdo.cs | 4 +- .../SqlServer/SqlServerAdo/SqlServerAdo.cs | 4 +- FreeSql/Sqlite/SqliteAdo/SqliteAdo.cs | 4 +- 12 files changed, 93 insertions(+), 33 deletions(-) diff --git a/FreeSql.Repository/BaseRepository.cs b/FreeSql.Repository/BaseRepository.cs index 3edadbdc..ce2fa027 100644 --- a/FreeSql.Repository/BaseRepository.cs +++ b/FreeSql.Repository/BaseRepository.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Threading.Tasks; @@ -18,21 +19,69 @@ namespace FreeSql { public IUpdate UpdateDiy => _fsql.Update(); - public void Delete(Expression> predicate) => _fsql.Delete().Where(predicate).ExecuteAffrows(); + public int Delete(Expression> predicate) => _fsql.Delete().Where(predicate).ExecuteAffrows(); - public void Delete(TEntity entity) => _fsql.Delete(entity).ExecuteAffrows(); + public int Delete(TEntity entity) => _fsql.Delete(entity).ExecuteAffrows(); - public Task DeleteAsync(Expression> predicate) => _fsql.Delete().Where(predicate).ExecuteAffrowsAsync(); + public Task DeleteAsync(Expression> predicate) => _fsql.Delete().Where(predicate).ExecuteAffrowsAsync(); - public Task DeleteAsync(TEntity entity) => _fsql.Delete(entity).ExecuteAffrowsAsync(); + public Task DeleteAsync(TEntity entity) => _fsql.Delete(entity).ExecuteAffrowsAsync(); - public TEntity Insert(TEntity entity) => _fsql.Insert().AppendData(entity).ExecuteInserted().FirstOrDefault(); + public virtual TEntity Insert(TEntity entity) { + switch (_fsql.Ado.DataType) { + case DataType.SqlServer: + case DataType.PostgreSQL: + return _fsql.Insert().AppendData(entity).ExecuteInserted().FirstOrDefault(); + case DataType.MySql: + case DataType.Oracle: + case DataType.Sqlite: + default: + throw new NotImplementedException($"{_fsql.Ado.DataType}不支持类似returning或output类型的特性,请参考FreeSql插入数据的方法重新现实。"); + } + } - async public Task InsertAsync(TEntity entity) => (await _fsql.Insert().AppendData(entity).ExecuteInsertedAsync()).FirstOrDefault(); + public virtual List Insert(List entity) { + switch (_fsql.Ado.DataType) { + case DataType.SqlServer: + case DataType.PostgreSQL: + return _fsql.Insert().AppendData(entity).ExecuteInserted(); + case DataType.MySql: + case DataType.Oracle: + case DataType.Sqlite: + default: + throw new NotImplementedException($"{_fsql.Ado.DataType}不支持类似returning或output类型的特性,请参考FreeSql插入数据的方法重新现实。"); + } + } - public void Update(TEntity entity) => _fsql.Update().SetSource(entity).ExecuteAffrows(); + async public virtual Task InsertAsync(TEntity entity) { + switch (_fsql.Ado.DataType) { + case DataType.SqlServer: + case DataType.PostgreSQL: + return (await _fsql.Insert().AppendData(entity).ExecuteInsertedAsync()).FirstOrDefault(); + case DataType.MySql: + case DataType.Oracle: + case DataType.Sqlite: + default: + throw new NotImplementedException($"{_fsql.Ado.DataType}不支持类似returning或output类型的特性,请参考FreeSql插入数据的方法重新现实。"); + } + } - public Task UpdateAsync(TEntity entity) => _fsql.Update().SetSource(entity).ExecuteAffrowsAsync(); + public virtual Task> InsertAsync(List entity) { + switch (_fsql.Ado.DataType) { + case DataType.SqlServer: + case DataType.PostgreSQL: + return _fsql.Insert().AppendData(entity).ExecuteInsertedAsync(); + case DataType.MySql: + case DataType.Oracle: + case DataType.Sqlite: + default: + throw new NotImplementedException($"{_fsql.Ado.DataType}不支持类似returning或output类型的特性,请参考FreeSql插入数据的方法重新现实。"); + } + } + + public int Update(TEntity entity) => _fsql.Update().SetSource(entity).ExecuteAffrows(); + + public Task UpdateAsync(TEntity entity) => _fsql.Update().SetSource(entity).ExecuteAffrowsAsync(); } public abstract class BaseRepository : BaseRepository, IRepository @@ -41,9 +90,9 @@ namespace FreeSql { public BaseRepository(IFreeSql fsql) : base(fsql) { } - public void Delete(TKey id) => _fsql.Delete(id).ExecuteAffrows(); + public int Delete(TKey id) => _fsql.Delete(id).ExecuteAffrows(); - public Task DeleteAsync(TKey id) => _fsql.Delete(id).ExecuteAffrowsAsync(); + public Task DeleteAsync(TKey id) => _fsql.Delete(id).ExecuteAffrowsAsync(); public TEntity Find(TKey id) => _fsql.Select(id).ToOne(); diff --git a/FreeSql.Repository/FreeSql.Repository.csproj b/FreeSql.Repository/FreeSql.Repository.csproj index ad9d309f..285a6fc4 100644 --- a/FreeSql.Repository/FreeSql.Repository.csproj +++ b/FreeSql.Repository/FreeSql.Repository.csproj @@ -2,9 +2,9 @@ netstandard2.0 - 0.1.2 + 0.1.3 YeXiangQin - 打造 .NETCore 最方便的 ORM,DbFirst 与 CodeFirst 混合使用,提供从实体同步数据库,或者从数据库生成实体代码,支持 MySql/SqlServer/PostgreSQL/Oracle/Sqlite 数据库。 + FreeSql 通用仓库层现实,支持 MySql/SqlServer/PostgreSQL/Oracle/Sqlite 数据库。 https://github.com/2881099/FreeSql FreeSql ORM Repository true diff --git a/FreeSql.Repository/IBasicRepository.cs b/FreeSql.Repository/IBasicRepository.cs index 95d7ebdb..db2f0a17 100644 --- a/FreeSql.Repository/IBasicRepository.cs +++ b/FreeSql.Repository/IBasicRepository.cs @@ -1,28 +1,33 @@ -using System.Threading.Tasks; +using System.Collections.Generic; +using System.Threading.Tasks; namespace FreeSql { public interface IBasicRepository : IReadOnlyRepository where TEntity : class { TEntity Insert(TEntity entity); + List Insert(List entity); + Task InsertAsync(TEntity entity); - void Update(TEntity entity); + Task> InsertAsync(List entity); - Task UpdateAsync(TEntity entity); + int Update(TEntity entity); + + Task UpdateAsync(TEntity entity); IUpdate UpdateDiy { get; } - void Delete(TEntity entity); + int Delete(TEntity entity); - Task DeleteAsync(TEntity entity); + Task DeleteAsync(TEntity entity); } public interface IBasicRepository : IBasicRepository, IReadOnlyRepository where TEntity : class { - void Delete(TKey id); + int Delete(TKey id); - Task DeleteAsync(TKey id); + Task DeleteAsync(TKey id); } } diff --git a/FreeSql.Repository/IRepository.cs b/FreeSql.Repository/IRepository.cs index 309ea461..a5505b88 100644 --- a/FreeSql.Repository/IRepository.cs +++ b/FreeSql.Repository/IRepository.cs @@ -10,9 +10,9 @@ namespace FreeSql { public interface IRepository : IReadOnlyRepository, IBasicRepository where TEntity : class { - void Delete(Expression> predicate); + int Delete(Expression> predicate); - Task DeleteAsync(Expression> predicate); + Task DeleteAsync(Expression> predicate); } public interface IRepository : IRepository, IReadOnlyRepository, IBasicRepository diff --git a/FreeSql/FreeSql.csproj b/FreeSql/FreeSql.csproj index bc1cfe4c..cdf49b94 100644 --- a/FreeSql/FreeSql.csproj +++ b/FreeSql/FreeSql.csproj @@ -2,7 +2,7 @@ netstandard2.0 - 0.1.2 + 0.1.3 true YeXiangQin 打造 .NETCore 最方便的 ORM,DbFirst 与 CodeFirst 混合使用,提供从实体同步数据库,或者从数据库生成实体代码,支持 MySql/SqlServer/PostgreSQL/Oracle/Sqlite 数据库。 diff --git a/FreeSql/Interface/IAdo.cs b/FreeSql/Interface/IAdo.cs index 61cf4433..1f40a49e 100644 --- a/FreeSql/Interface/IAdo.cs +++ b/FreeSql/Interface/IAdo.cs @@ -25,6 +25,10 @@ namespace FreeSql { /// 监视数据库命令对象(执行后,用于监视执行性能) /// Action AopCommandExecuted { get; set; } + /// + /// 数据库类型 + /// + DataType DataType { get; } #region 事务 /// diff --git a/FreeSql/Internal/CommonProvider/AdoProvider/AdoProvider.cs b/FreeSql/Internal/CommonProvider/AdoProvider/AdoProvider.cs index 34a7eee5..bebff47d 100644 --- a/FreeSql/Internal/CommonProvider/AdoProvider/AdoProvider.cs +++ b/FreeSql/Internal/CommonProvider/AdoProvider/AdoProvider.cs @@ -23,15 +23,17 @@ namespace FreeSql.Internal.CommonProvider { public ObjectPool MasterPool { get; protected set; } public List> SlavePools { get; } = new List>(); + public DataType DataType { get; } protected ICache _cache { get; set; } protected ILogger _log { get; set; } protected int slaveUnavailables = 0; private object slaveLock = new object(); private Random slaveRandom = new Random(); - public AdoProvider(ICache cache, ILogger log) { + public AdoProvider(ICache cache, ILogger log, DataType dataType) { this._cache = cache; this._log = log; + this.DataType = dataType; } void LoggerException(ObjectPool pool, DbCommand cmd, Exception e, DateTime dt, StringBuilder logtxt, bool isThrowException = true) { diff --git a/FreeSql/MySql/MySqlAdo/MySqlAdo.cs b/FreeSql/MySql/MySqlAdo/MySqlAdo.cs index 89c57a2d..23a93b24 100644 --- a/FreeSql/MySql/MySqlAdo/MySqlAdo.cs +++ b/FreeSql/MySql/MySqlAdo/MySqlAdo.cs @@ -12,8 +12,8 @@ namespace FreeSql.MySql { class MySqlAdo : FreeSql.Internal.CommonProvider.AdoProvider { CommonUtils _util; - public MySqlAdo() : base(null, null) { } - public MySqlAdo(CommonUtils util, ICache cache, ILogger log, string masterConnectionString, string[] slaveConnectionStrings) : base(cache, log) { + public MySqlAdo() : base(null, null, DataType.MySql) { } + public MySqlAdo(CommonUtils util, ICache cache, ILogger log, string masterConnectionString, string[] slaveConnectionStrings) : base(cache, log, DataType.MySql) { this._util = util; MasterPool = new MySqlConnectionPool("主库", masterConnectionString, null, null); if (slaveConnectionStrings != null) { diff --git a/FreeSql/Oracle/OracleAdo/OracleAdo.cs b/FreeSql/Oracle/OracleAdo/OracleAdo.cs index 14bbc80c..757b031e 100644 --- a/FreeSql/Oracle/OracleAdo/OracleAdo.cs +++ b/FreeSql/Oracle/OracleAdo/OracleAdo.cs @@ -12,8 +12,8 @@ namespace FreeSql.Oracle { class OracleAdo : FreeSql.Internal.CommonProvider.AdoProvider { CommonUtils _util; - public OracleAdo() : base(null, null) { } - public OracleAdo(CommonUtils util, ICache cache, ILogger log, string masterConnectionString, string[] slaveConnectionStrings) : base(cache, log) { + public OracleAdo() : base(null, null, DataType.Oracle) { } + public OracleAdo(CommonUtils util, ICache cache, ILogger log, string masterConnectionString, string[] slaveConnectionStrings) : base(cache, log, DataType.Oracle) { this._util = util; MasterPool = new OracleConnectionPool("主库", masterConnectionString, null, null); if (slaveConnectionStrings != null) { diff --git a/FreeSql/PostgreSQL/PostgreSQLAdo/PostgreSQLAdo.cs b/FreeSql/PostgreSQL/PostgreSQLAdo/PostgreSQLAdo.cs index 411147a3..8b86c595 100644 --- a/FreeSql/PostgreSQL/PostgreSQLAdo/PostgreSQLAdo.cs +++ b/FreeSql/PostgreSQL/PostgreSQLAdo/PostgreSQLAdo.cs @@ -14,8 +14,8 @@ namespace FreeSql.PostgreSQL { class PostgreSQLAdo : FreeSql.Internal.CommonProvider.AdoProvider { CommonUtils _util; - public PostgreSQLAdo() : base(null, null) { } - public PostgreSQLAdo(CommonUtils util, ICache cache, ILogger log, string masterConnectionString, string[] slaveConnectionStrings) : base(cache, log) { + public PostgreSQLAdo() : base(null, null, DataType.PostgreSQL) { } + public PostgreSQLAdo(CommonUtils util, ICache cache, ILogger log, string masterConnectionString, string[] slaveConnectionStrings) : base(cache, log, DataType.PostgreSQL) { this._util = util; MasterPool = new PostgreSQLConnectionPool("主库", masterConnectionString, null, null); if (slaveConnectionStrings != null) { diff --git a/FreeSql/SqlServer/SqlServerAdo/SqlServerAdo.cs b/FreeSql/SqlServer/SqlServerAdo/SqlServerAdo.cs index 1fc5714d..6979f837 100644 --- a/FreeSql/SqlServer/SqlServerAdo/SqlServerAdo.cs +++ b/FreeSql/SqlServer/SqlServerAdo/SqlServerAdo.cs @@ -12,8 +12,8 @@ namespace FreeSql.SqlServer { class SqlServerAdo : FreeSql.Internal.CommonProvider.AdoProvider { CommonUtils _util; - public SqlServerAdo() : base(null, null) { } - public SqlServerAdo(CommonUtils util, ICache cache, ILogger log, string masterConnectionString, string[] slaveConnectionStrings) : base(cache, log) { + public SqlServerAdo() : base(null, null, DataType.SqlServer) { } + public SqlServerAdo(CommonUtils util, ICache cache, ILogger log, string masterConnectionString, string[] slaveConnectionStrings) : base(cache, log, DataType.SqlServer) { this._util = util; MasterPool = new SqlServerConnectionPool("主库", masterConnectionString, null, null); if (slaveConnectionStrings != null) { diff --git a/FreeSql/Sqlite/SqliteAdo/SqliteAdo.cs b/FreeSql/Sqlite/SqliteAdo/SqliteAdo.cs index a1c8aca5..7a2ab09f 100644 --- a/FreeSql/Sqlite/SqliteAdo/SqliteAdo.cs +++ b/FreeSql/Sqlite/SqliteAdo/SqliteAdo.cs @@ -12,8 +12,8 @@ namespace FreeSql.Sqlite { class SqliteAdo : FreeSql.Internal.CommonProvider.AdoProvider { CommonUtils _util; - public SqliteAdo() : base(null, null) { } - public SqliteAdo(CommonUtils util, ICache cache, ILogger log, string masterConnectionString, string[] slaveConnectionStrings) : base(cache, log) { + public SqliteAdo() : base(null, null, DataType.Sqlite) { } + public SqliteAdo(CommonUtils util, ICache cache, ILogger log, string masterConnectionString, string[] slaveConnectionStrings) : base(cache, log, DataType.Sqlite) { this._util = util; MasterPool = new SqliteConnectionPool("主库", masterConnectionString, null, null); if (slaveConnectionStrings != null) {