mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-06-18 20:08:15 +08:00
- 增加 .Net Framework 4.0 的支持,出于环境考虑 .Net Framework 4.0 不支持异步方法;
- 增加 IFreeSql.Insert<T>(IEnumerable<T1> source) 方法;
This commit is contained in:
@ -72,13 +72,13 @@ namespace FreeSql
|
||||
var props = _dicGetDbSetProps.GetOrAdd(this.GetType(), tp =>
|
||||
tp.GetProperties(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public)
|
||||
.Where(a => a.PropertyType.IsGenericType &&
|
||||
a.PropertyType == typeof(DbSet<>).MakeGenericType(a.PropertyType.GenericTypeArguments[0])).ToArray());
|
||||
a.PropertyType == typeof(DbSet<>).MakeGenericType(a.PropertyType.GetGenericArguments()[0])).ToArray());
|
||||
|
||||
foreach (var prop in props)
|
||||
{
|
||||
var set = this.Set(prop.PropertyType.GenericTypeArguments[0]);
|
||||
var set = this.Set(prop.PropertyType.GetGenericArguments()[0]);
|
||||
|
||||
prop.SetValue(this, set);
|
||||
prop.SetValue(this, set, null);
|
||||
AllSets.Add(prop.Name, set);
|
||||
}
|
||||
}
|
||||
@ -105,8 +105,6 @@ namespace FreeSql
|
||||
/// <param name="data"></param>
|
||||
public void Add<TEntity>(TEntity data) where TEntity : class => this.Set<TEntity>().Add(data);
|
||||
public void AddRange<TEntity>(IEnumerable<TEntity> data) where TEntity : class => this.Set<TEntity>().AddRange(data);
|
||||
public Task AddAsync<TEntity>(TEntity data) where TEntity : class => this.Set<TEntity>().AddAsync(data);
|
||||
public Task AddRangeAsync<TEntity>(IEnumerable<TEntity> data) where TEntity : class => this.Set<TEntity>().AddRangeAsync(data);
|
||||
|
||||
/// <summary>
|
||||
/// 更新
|
||||
@ -115,8 +113,6 @@ namespace FreeSql
|
||||
/// <param name="data"></param>
|
||||
public void Update<TEntity>(TEntity data) where TEntity : class => this.Set<TEntity>().Update(data);
|
||||
public void UpdateRange<TEntity>(IEnumerable<TEntity> data) where TEntity : class => this.Set<TEntity>().UpdateRange(data);
|
||||
public Task UpdateAsync<TEntity>(TEntity data) where TEntity : class => this.Set<TEntity>().UpdateAsync(data);
|
||||
public Task UpdateRangeAsync<TEntity>(IEnumerable<TEntity> data) where TEntity : class => this.Set<TEntity>().UpdateRangeAsync(data);
|
||||
|
||||
/// <summary>
|
||||
/// 删除
|
||||
@ -132,7 +128,6 @@ namespace FreeSql
|
||||
/// <typeparam name="TEntity"></typeparam>
|
||||
/// <param name="data"></param>
|
||||
public void AddOrUpdate<TEntity>(TEntity data) where TEntity : class => this.Set<TEntity>().AddOrUpdate(data);
|
||||
public Task AddOrUpdateAsync<TEntity>(TEntity data) where TEntity : class => this.Set<TEntity>().AddOrUpdateAsync(data);
|
||||
|
||||
/// <summary>
|
||||
/// 附加实体,可用于不查询就更新或删除
|
||||
@ -152,6 +147,16 @@ namespace FreeSql
|
||||
this.Set<TEntity>().AttachOnlyPrimary(data);
|
||||
return this;
|
||||
}
|
||||
#if net40
|
||||
#else
|
||||
public Task AddAsync<TEntity>(TEntity data) where TEntity : class => this.Set<TEntity>().AddAsync(data);
|
||||
public Task AddRangeAsync<TEntity>(IEnumerable<TEntity> data) where TEntity : class => this.Set<TEntity>().AddRangeAsync(data);
|
||||
|
||||
public Task UpdateAsync<TEntity>(TEntity data) where TEntity : class => this.Set<TEntity>().UpdateAsync(data);
|
||||
public Task UpdateRangeAsync<TEntity>(IEnumerable<TEntity> data) where TEntity : class => this.Set<TEntity>().UpdateRangeAsync(data);
|
||||
|
||||
public Task AddOrUpdateAsync<TEntity>(TEntity data) where TEntity : class => this.Set<TEntity>().AddOrUpdateAsync(data);
|
||||
#endif
|
||||
#endregion
|
||||
|
||||
#region Queue Action
|
||||
|
@ -5,11 +5,12 @@ using System.Reflection;
|
||||
using System.Linq.Expressions;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
#if net40
|
||||
#else
|
||||
namespace FreeSql
|
||||
{
|
||||
partial class DbContext
|
||||
{
|
||||
|
||||
async public virtual Task<int> SaveChangesAsync()
|
||||
{
|
||||
await ExecCommandAsync();
|
||||
@ -133,3 +134,4 @@ namespace FreeSql
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
@ -8,11 +8,12 @@ using System.Linq.Expressions;
|
||||
using System.Reflection;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
#if net40
|
||||
#else
|
||||
namespace FreeSql
|
||||
{
|
||||
partial class DbSet<TEntity>
|
||||
{
|
||||
|
||||
Task DbContextExecCommandAsync()
|
||||
{
|
||||
_dicUpdateTimes.Clear();
|
||||
@ -409,3 +410,4 @@ namespace FreeSql
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
#endif
|
@ -169,11 +169,11 @@ namespace FreeSql
|
||||
var lazyFieldValue = (bool)lazyField.GetValue(item);
|
||||
if (lazyFieldValue == false) continue;
|
||||
}
|
||||
propVal = prop.Value.GetValue(item);
|
||||
propVal = prop.Value.GetValue(item, null);
|
||||
}
|
||||
else
|
||||
{
|
||||
propVal = prop.Value.GetValue(item);
|
||||
propVal = prop.Value.GetValue(item, null);
|
||||
if (propVal == null) continue;
|
||||
}
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFrameworks>netstandard2.0;net45</TargetFrameworks>
|
||||
<TargetFrameworks>netstandard2.0;net45;net40</TargetFrameworks>
|
||||
<Version>0.10.14</Version>
|
||||
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
|
||||
<Authors>YeXiangQin</Authors>
|
||||
@ -29,7 +29,10 @@
|
||||
<PropertyGroup Condition="'$(TargetFramework)' == 'netstandard2.0'">
|
||||
<DefineConstants>ns20;netstandard20</DefineConstants>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(TargetFramework)' == 'net40'">
|
||||
<DefineConstants>net40</DefineConstants>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0'">
|
||||
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="2.1.1" />
|
||||
</ItemGroup>
|
||||
|
@ -79,10 +79,13 @@ namespace FreeSql
|
||||
ExecCommand();
|
||||
return SaveChangesSuccess();
|
||||
}
|
||||
#if net40
|
||||
#else
|
||||
async public override Task<int> SaveChangesAsync()
|
||||
{
|
||||
await ExecCommandAsync();
|
||||
return SaveChangesSuccess();
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
@ -7,7 +7,7 @@ using System.Threading.Tasks;
|
||||
|
||||
namespace FreeSql
|
||||
{
|
||||
public abstract class BaseRepository<TEntity> : IBaseRepository<TEntity>
|
||||
public abstract partial class BaseRepository<TEntity> : IBaseRepository<TEntity>
|
||||
where TEntity : class
|
||||
{
|
||||
|
||||
@ -78,35 +78,17 @@ namespace FreeSql
|
||||
_db._entityChangeReport.Add(new DbContext.EntityChangeReport.ChangeInfo { Object = sql, Type = DbContext.EntityChangeType.SqlRaw });
|
||||
return affrows;
|
||||
}
|
||||
async public Task<int> DeleteAsync(Expression<Func<TEntity, bool>> predicate)
|
||||
{
|
||||
var delete = _dbset.OrmDeleteInternal(null).Where(predicate);
|
||||
var sql = delete.ToSql();
|
||||
var affrows = await delete.ExecuteAffrowsAsync();
|
||||
_db._entityChangeReport.Add(new DbContext.EntityChangeReport.ChangeInfo { Object = sql, Type = DbContext.EntityChangeType.SqlRaw });
|
||||
return affrows;
|
||||
}
|
||||
|
||||
public int Delete(TEntity entity)
|
||||
{
|
||||
_dbset.Remove(entity);
|
||||
return _db.SaveChanges();
|
||||
}
|
||||
public Task<int> DeleteAsync(TEntity entity)
|
||||
{
|
||||
_dbset.Remove(entity);
|
||||
return _db.SaveChangesAsync();
|
||||
}
|
||||
public int Delete(IEnumerable<TEntity> entitys)
|
||||
{
|
||||
_dbset.RemoveRange(entitys);
|
||||
return _db.SaveChanges();
|
||||
}
|
||||
public Task<int> DeleteAsync(IEnumerable<TEntity> entitys)
|
||||
{
|
||||
_dbset.RemoveRange(entitys);
|
||||
return _db.SaveChangesAsync();
|
||||
}
|
||||
|
||||
public virtual TEntity Insert(TEntity entity)
|
||||
{
|
||||
@ -114,45 +96,23 @@ namespace FreeSql
|
||||
_db.SaveChanges();
|
||||
return entity;
|
||||
}
|
||||
async public virtual Task<TEntity> InsertAsync(TEntity entity)
|
||||
{
|
||||
await _dbset.AddAsync(entity);
|
||||
_db.SaveChanges();
|
||||
return entity;
|
||||
}
|
||||
public virtual List<TEntity> Insert(IEnumerable<TEntity> entitys)
|
||||
{
|
||||
_dbset.AddRange(entitys);
|
||||
_db.SaveChanges();
|
||||
return entitys.ToList();
|
||||
}
|
||||
async public virtual Task<List<TEntity>> InsertAsync(IEnumerable<TEntity> entitys)
|
||||
{
|
||||
await _dbset.AddRangeAsync(entitys);
|
||||
await _db.SaveChangesAsync();
|
||||
return entitys.ToList();
|
||||
}
|
||||
|
||||
public int Update(TEntity entity)
|
||||
{
|
||||
_dbset.Update(entity);
|
||||
return _db.SaveChanges();
|
||||
}
|
||||
public Task<int> UpdateAsync(TEntity entity)
|
||||
{
|
||||
_dbset.Update(entity);
|
||||
return _db.SaveChangesAsync();
|
||||
}
|
||||
public int Update(IEnumerable<TEntity> entitys)
|
||||
{
|
||||
_dbset.UpdateRange(entitys);
|
||||
return _db.SaveChanges();
|
||||
}
|
||||
public Task<int> UpdateAsync(IEnumerable<TEntity> entitys)
|
||||
{
|
||||
_dbset.UpdateRange(entitys);
|
||||
return _db.SaveChangesAsync();
|
||||
}
|
||||
|
||||
public void Attach(TEntity data) => _db.Attach(data);
|
||||
public void Attach(IEnumerable<TEntity> data) => _db.AttachRange(data);
|
||||
@ -169,15 +129,9 @@ namespace FreeSql
|
||||
_db.SaveChanges();
|
||||
return entity;
|
||||
}
|
||||
async public Task<TEntity> InsertOrUpdateAsync(TEntity entity)
|
||||
{
|
||||
await _dbset.AddOrUpdateAsync(entity);
|
||||
_db.SaveChanges();
|
||||
return entity;
|
||||
}
|
||||
}
|
||||
|
||||
public abstract class BaseRepository<TEntity, TKey> : BaseRepository<TEntity>, IBaseRepository<TEntity, TKey>
|
||||
public abstract partial class BaseRepository<TEntity, TKey> : BaseRepository<TEntity>, IBaseRepository<TEntity, TKey>
|
||||
where TEntity : class
|
||||
{
|
||||
|
||||
@ -198,12 +152,9 @@ namespace FreeSql
|
||||
}
|
||||
|
||||
public int Delete(TKey id) => Delete(CheckTKeyAndReturnIdEntity(id));
|
||||
public Task<int> DeleteAsync(TKey id) => DeleteAsync(CheckTKeyAndReturnIdEntity(id));
|
||||
|
||||
public TEntity Find(TKey id) => _dbset.OrmSelectInternal(CheckTKeyAndReturnIdEntity(id)).ToOne();
|
||||
public Task<TEntity> FindAsync(TKey id) => _dbset.OrmSelectInternal(CheckTKeyAndReturnIdEntity(id)).ToOneAsync();
|
||||
|
||||
public TEntity Get(TKey id) => Find(id);
|
||||
public Task<TEntity> GetAsync(TKey id) => FindAsync(id);
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,78 @@
|
||||
using FreeSql.Extensions.EntityUtil;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Linq.Expressions;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
#if net40
|
||||
#else
|
||||
namespace FreeSql
|
||||
{
|
||||
partial class BaseRepository<TEntity>
|
||||
where TEntity : class
|
||||
{
|
||||
|
||||
async public Task<int> DeleteAsync(Expression<Func<TEntity, bool>> predicate)
|
||||
{
|
||||
var delete = _dbset.OrmDeleteInternal(null).Where(predicate);
|
||||
var sql = delete.ToSql();
|
||||
var affrows = await delete.ExecuteAffrowsAsync();
|
||||
_db._entityChangeReport.Add(new DbContext.EntityChangeReport.ChangeInfo { Object = sql, Type = DbContext.EntityChangeType.SqlRaw });
|
||||
return affrows;
|
||||
}
|
||||
|
||||
public Task<int> DeleteAsync(TEntity entity)
|
||||
{
|
||||
_dbset.Remove(entity);
|
||||
return _db.SaveChangesAsync();
|
||||
}
|
||||
public Task<int> DeleteAsync(IEnumerable<TEntity> entitys)
|
||||
{
|
||||
_dbset.RemoveRange(entitys);
|
||||
return _db.SaveChangesAsync();
|
||||
}
|
||||
|
||||
async public virtual Task<TEntity> InsertAsync(TEntity entity)
|
||||
{
|
||||
await _dbset.AddAsync(entity);
|
||||
_db.SaveChanges();
|
||||
return entity;
|
||||
}
|
||||
async public virtual Task<List<TEntity>> InsertAsync(IEnumerable<TEntity> entitys)
|
||||
{
|
||||
await _dbset.AddRangeAsync(entitys);
|
||||
await _db.SaveChangesAsync();
|
||||
return entitys.ToList();
|
||||
}
|
||||
|
||||
public Task<int> UpdateAsync(TEntity entity)
|
||||
{
|
||||
_dbset.Update(entity);
|
||||
return _db.SaveChangesAsync();
|
||||
}
|
||||
public Task<int> UpdateAsync(IEnumerable<TEntity> entitys)
|
||||
{
|
||||
_dbset.UpdateRange(entitys);
|
||||
return _db.SaveChangesAsync();
|
||||
}
|
||||
|
||||
async public Task<TEntity> InsertOrUpdateAsync(TEntity entity)
|
||||
{
|
||||
await _dbset.AddOrUpdateAsync(entity);
|
||||
_db.SaveChanges();
|
||||
return entity;
|
||||
}
|
||||
}
|
||||
|
||||
partial class BaseRepository<TEntity, TKey>
|
||||
{
|
||||
|
||||
public Task<int> DeleteAsync(TKey id) => DeleteAsync(CheckTKeyAndReturnIdEntity(id));
|
||||
|
||||
public Task<TEntity> FindAsync(TKey id) => _dbset.OrmSelectInternal(CheckTKeyAndReturnIdEntity(id)).ToOneAsync();
|
||||
|
||||
public Task<TEntity> GetAsync(TKey id) => FindAsync(id);
|
||||
}
|
||||
}
|
||||
#endif
|
@ -29,7 +29,10 @@ namespace FreeSql
|
||||
{
|
||||
int Delete(Expression<Func<TEntity, bool>> predicate);
|
||||
|
||||
#if net40
|
||||
#else
|
||||
Task<int> DeleteAsync(Expression<Func<TEntity, bool>> predicate);
|
||||
#endif
|
||||
}
|
||||
|
||||
public interface IBaseRepository<TEntity, TKey> : IBaseRepository<TEntity>, IReadOnlyRepository<TEntity, TKey>, IBasicRepository<TEntity, TKey>
|
||||
|
@ -8,8 +8,6 @@ namespace FreeSql
|
||||
{
|
||||
TEntity Insert(TEntity entity);
|
||||
List<TEntity> Insert(IEnumerable<TEntity> entitys);
|
||||
Task<TEntity> InsertAsync(TEntity entity);
|
||||
Task<List<TEntity>> InsertAsync(IEnumerable<TEntity> entitys);
|
||||
|
||||
/// <summary>
|
||||
/// 清空状态数据
|
||||
@ -29,18 +27,26 @@ namespace FreeSql
|
||||
|
||||
int Update(TEntity entity);
|
||||
int Update(IEnumerable<TEntity> entitys);
|
||||
Task<int> UpdateAsync(TEntity entity);
|
||||
Task<int> UpdateAsync(IEnumerable<TEntity> entitys);
|
||||
|
||||
TEntity InsertOrUpdate(TEntity entity);
|
||||
Task<TEntity> InsertOrUpdateAsync(TEntity entity);
|
||||
|
||||
IUpdate<TEntity> UpdateDiy { get; }
|
||||
|
||||
int Delete(TEntity entity);
|
||||
int Delete(IEnumerable<TEntity> entitys);
|
||||
|
||||
#if net40
|
||||
#else
|
||||
Task<TEntity> InsertAsync(TEntity entity);
|
||||
Task<List<TEntity>> InsertAsync(IEnumerable<TEntity> entitys);
|
||||
|
||||
Task<int> UpdateAsync(TEntity entity);
|
||||
Task<int> UpdateAsync(IEnumerable<TEntity> entitys);
|
||||
Task<TEntity> InsertOrUpdateAsync(TEntity entity);
|
||||
|
||||
Task<int> DeleteAsync(TEntity entity);
|
||||
Task<int> DeleteAsync(IEnumerable<TEntity> entitys);
|
||||
#endif
|
||||
}
|
||||
|
||||
public interface IBasicRepository<TEntity, TKey> : IBasicRepository<TEntity>, IReadOnlyRepository<TEntity, TKey>
|
||||
@ -48,7 +54,10 @@ namespace FreeSql
|
||||
{
|
||||
int Delete(TKey id);
|
||||
|
||||
#if net40
|
||||
#else
|
||||
Task<int> DeleteAsync(TKey id);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -20,11 +20,12 @@ namespace FreeSql
|
||||
where TEntity : class
|
||||
{
|
||||
TEntity Get(TKey id);
|
||||
|
||||
Task<TEntity> GetAsync(TKey id);
|
||||
|
||||
TEntity Find(TKey id);
|
||||
|
||||
#if net40
|
||||
#else
|
||||
Task<TEntity> GetAsync(TKey id);
|
||||
Task<TEntity> FindAsync(TKey id);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user