mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-04-22 02:32:50 +08:00
- 增加 IBaseRepository.AsTable 重载方法支持多表表名设置;
This commit is contained in:
parent
78f1f3d856
commit
1a0507d621
@ -552,6 +552,12 @@
|
|||||||
</summary>
|
</summary>
|
||||||
<param name="rule"></param>
|
<param name="rule"></param>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="M:FreeSql.IBaseRepository.AsTable(System.Func{System.Type,System.String,System.String})">
|
||||||
|
<summary>
|
||||||
|
分表规则,参数:实体类型、旧表名;返回:新表名 https://github.com/2881099/FreeSql/wiki/Repository
|
||||||
|
</summary>
|
||||||
|
<param name="rule"></param>
|
||||||
|
</member>
|
||||||
<member name="P:FreeSql.IBaseRepository.DbContextOptions">
|
<member name="P:FreeSql.IBaseRepository.DbContextOptions">
|
||||||
<summary>
|
<summary>
|
||||||
设置 DbContext 选项
|
设置 DbContext 选项
|
||||||
|
@ -18,8 +18,9 @@ namespace FreeSql
|
|||||||
_repo = repo;
|
_repo = repo;
|
||||||
}
|
}
|
||||||
|
|
||||||
static ConcurrentDictionary<Type, FieldInfo> _dicGetRepositoryDbField = new ConcurrentDictionary<Type, FieldInfo>();
|
static ConcurrentDictionary<Type, ConcurrentDictionary<string, FieldInfo>> _dicGetRepositoryDbField = new ConcurrentDictionary<Type, ConcurrentDictionary<string, FieldInfo>>();
|
||||||
static FieldInfo GetRepositoryDbField(Type type) => _dicGetRepositoryDbField.GetOrAdd(type, tp => typeof(BaseRepository<,>).MakeGenericType(tp, typeof(int)).GetField("_dbPriv", BindingFlags.Instance | BindingFlags.NonPublic));
|
static FieldInfo GetRepositoryDbField(Type type, string fieldName) => _dicGetRepositoryDbField.GetOrAdd(type, tp => new ConcurrentDictionary<string, FieldInfo>()).GetOrAdd(fieldName, fn =>
|
||||||
|
typeof(BaseRepository<,>).MakeGenericType(type, typeof(int)).GetField(fieldName, BindingFlags.Instance | BindingFlags.NonPublic));
|
||||||
public override IDbSet Set(Type entityType)
|
public override IDbSet Set(Type entityType)
|
||||||
{
|
{
|
||||||
if (_dicSet.ContainsKey(entityType)) return _dicSet[entityType];
|
if (_dicSet.ContainsKey(entityType)) return _dicSet[entityType];
|
||||||
@ -32,7 +33,9 @@ namespace FreeSql
|
|||||||
{
|
{
|
||||||
repo = Activator.CreateInstance(typeof(DefaultRepository<,>).MakeGenericType(entityType, typeof(int)), _repo.Orm);
|
repo = Activator.CreateInstance(typeof(DefaultRepository<,>).MakeGenericType(entityType, typeof(int)), _repo.Orm);
|
||||||
(repo as IBaseRepository).UnitOfWork = _repo.UnitOfWork;
|
(repo as IBaseRepository).UnitOfWork = _repo.UnitOfWork;
|
||||||
GetRepositoryDbField(entityType).SetValue(repo, this);
|
GetRepositoryDbField(entityType, "_dbPriv").SetValue(repo, this);
|
||||||
|
GetRepositoryDbField(entityType, "_asTablePriv").SetValue(repo,
|
||||||
|
GetRepositoryDbField(_repo.EntityType, "_asTablePriv").GetValue(_repo));
|
||||||
|
|
||||||
if (typeof(IBaseRepository<>).MakeGenericType(_repo.EntityType).IsAssignableFrom(_repo.GetType()))
|
if (typeof(IBaseRepository<>).MakeGenericType(_repo.EntityType).IsAssignableFrom(_repo.GetType()))
|
||||||
typeof(RepositoryDbContext).GetMethod("SetRepositoryDataFilter").MakeGenericMethod(_repo.EntityType)
|
typeof(RepositoryDbContext).GetMethod("SetRepositoryDataFilter").MakeGenericMethod(_repo.EntityType)
|
||||||
|
@ -30,8 +30,8 @@ namespace FreeSql
|
|||||||
|
|
||||||
protected override ISelect<TEntity> OrmSelect(object dywhere)
|
protected override ISelect<TEntity> OrmSelect(object dywhere)
|
||||||
{
|
{
|
||||||
var select = base.OrmSelect(dywhere).AsTable(_repo.AsTableSelectValueInternal);
|
var select = base.OrmSelect(dywhere);
|
||||||
|
if (_repo._asTablePriv != null) select.AsTable(_repo._asTablePriv);
|
||||||
var filters = (_repo.DataFilter as DataFilter<TEntity>)._filters;
|
var filters = (_repo.DataFilter as DataFilter<TEntity>)._filters;
|
||||||
foreach (var filter in filters.Where(a => a.Value.IsEnabled == true)) select.Where(filter.Value.Expression);
|
foreach (var filter in filters.Where(a => a.Value.IsEnabled == true)) select.Where(filter.Value.Expression);
|
||||||
var disableFilter = filters.Where(a => a.Value.IsEnabled == false).Select(a => a.Key).ToList();
|
var disableFilter = filters.Where(a => a.Value.IsEnabled == false).Select(a => a.Key).ToList();
|
||||||
@ -42,7 +42,8 @@ namespace FreeSql
|
|||||||
internal ISelect<TEntity> OrmSelectInternal(object dywhere) => OrmSelect(dywhere);
|
internal ISelect<TEntity> OrmSelectInternal(object dywhere) => OrmSelect(dywhere);
|
||||||
protected override IUpdate<TEntity> OrmUpdate(IEnumerable<TEntity> entitys)
|
protected override IUpdate<TEntity> OrmUpdate(IEnumerable<TEntity> entitys)
|
||||||
{
|
{
|
||||||
var update = base.OrmUpdate(entitys).AsTable(_repo.AsTableValueInternal);
|
var update = base.OrmUpdate(entitys);
|
||||||
|
if (_repo._asTablePriv != null) update.AsTable(old => _repo._asTablePriv(_entityType, old));
|
||||||
var filters = (_repo.DataFilter as DataFilter<TEntity>)._filters;
|
var filters = (_repo.DataFilter as DataFilter<TEntity>)._filters;
|
||||||
foreach (var filter in filters.Where(a => a.Value.IsEnabled == true)) update.Where(filter.Value.Expression);
|
foreach (var filter in filters.Where(a => a.Value.IsEnabled == true)) update.Where(filter.Value.Expression);
|
||||||
var disableFilter = filters.Where(a => a.Value.IsEnabled == false).Select(a => a.Key).ToList();
|
var disableFilter = filters.Where(a => a.Value.IsEnabled == false).Select(a => a.Key).ToList();
|
||||||
@ -53,8 +54,9 @@ namespace FreeSql
|
|||||||
internal IUpdate<TEntity> OrmUpdateInternal(IEnumerable<TEntity> entitys) => OrmUpdate(entitys);
|
internal IUpdate<TEntity> OrmUpdateInternal(IEnumerable<TEntity> entitys) => OrmUpdate(entitys);
|
||||||
protected override IDelete<TEntity> OrmDelete(object dywhere)
|
protected override IDelete<TEntity> OrmDelete(object dywhere)
|
||||||
{
|
{
|
||||||
var delete = base.OrmDelete(dywhere).AsTable(_repo.AsTableValueInternal);
|
var delete = base.OrmDelete(dywhere);
|
||||||
var filters = (_repo.DataFilter as DataFilter<TEntity>)._filters;
|
if (_repo._asTablePriv != null) delete.AsTable(old => _repo._asTablePriv(_entityType, old));
|
||||||
|
var filters = (_repo.DataFilter as DataFilter<TEntity>)._filters;
|
||||||
foreach (var filter in filters.Where(a => a.Value.IsEnabled == true)) delete.Where(filter.Value.Expression);
|
foreach (var filter in filters.Where(a => a.Value.IsEnabled == true)) delete.Where(filter.Value.Expression);
|
||||||
var disableFilter = filters.Where(a => a.Value.IsEnabled == false).Select(a => a.Key).ToList();
|
var disableFilter = filters.Where(a => a.Value.IsEnabled == false).Select(a => a.Key).ToList();
|
||||||
disableFilter.AddRange((_repo.DataFilter as DataFilter<TEntity>)._filtersByOrm.Where(a => a.Value.IsEnabled == false).Select(a => a.Key));
|
disableFilter.AddRange((_repo.DataFilter as DataFilter<TEntity>)._filtersByOrm.Where(a => a.Value.IsEnabled == false).Select(a => a.Key));
|
||||||
@ -65,8 +67,9 @@ namespace FreeSql
|
|||||||
protected override IInsert<TEntity> OrmInsert(TEntity entity) => OrmInsert(new[] { entity });
|
protected override IInsert<TEntity> OrmInsert(TEntity entity) => OrmInsert(new[] { entity });
|
||||||
protected override IInsert<TEntity> OrmInsert(IEnumerable<TEntity> entitys)
|
protected override IInsert<TEntity> OrmInsert(IEnumerable<TEntity> entitys)
|
||||||
{
|
{
|
||||||
var insert = base.OrmInsert(entitys).AsTable(_repo.AsTableValueInternal);
|
var insert = base.OrmInsert(entitys);
|
||||||
var filters = (_repo.DataFilter as DataFilter<TEntity>)._filters.Where(a => a.Value.IsEnabled == true);
|
if (_repo._asTablePriv != null) insert.AsTable(old => _repo._asTablePriv(_entityType, old));
|
||||||
|
var filters = (_repo.DataFilter as DataFilter<TEntity>)._filters.Where(a => a.Value.IsEnabled == true);
|
||||||
foreach (var filter in filters)
|
foreach (var filter in filters)
|
||||||
{
|
{
|
||||||
if (entitys != null)
|
if (entitys != null)
|
||||||
|
@ -18,8 +18,7 @@ namespace FreeSql
|
|||||||
internal RepositoryDbSet<TEntity> _dbset => _dbsetPriv ?? (_dbsetPriv = _db.Set<TEntity>() as RepositoryDbSet<TEntity>);
|
internal RepositoryDbSet<TEntity> _dbset => _dbsetPriv ?? (_dbsetPriv = _db.Set<TEntity>() as RepositoryDbSet<TEntity>);
|
||||||
|
|
||||||
public IDataFilter<TEntity> DataFilter { get; } = new DataFilter<TEntity>();
|
public IDataFilter<TEntity> DataFilter { get; } = new DataFilter<TEntity>();
|
||||||
internal Func<string, string> AsTableValueInternal { get; private set; }
|
internal Func<Type, string, string> _asTablePriv;
|
||||||
internal Func<Type, string, string> AsTableSelectValueInternal { get; private set; }
|
|
||||||
|
|
||||||
protected void ApplyDataFilter(string name, Expression<Func<TEntity, bool>> exp) => DataFilter.Apply(name, exp);
|
protected void ApplyDataFilter(string name, Expression<Func<TEntity, bool>> exp) => DataFilter.Apply(name, exp);
|
||||||
|
|
||||||
@ -60,10 +59,18 @@ namespace FreeSql
|
|||||||
public void AsType(Type entityType) => _dbset.AsType(entityType);
|
public void AsType(Type entityType) => _dbset.AsType(entityType);
|
||||||
public void AsTable(Func<string, string> rule)
|
public void AsTable(Func<string, string> rule)
|
||||||
{
|
{
|
||||||
AsTableValueInternal = rule;
|
if (rule == null)
|
||||||
AsTableSelectValueInternal = rule == null ? null : new Func<Type, string, string>((a, b) => a == EntityType ? rule(b) : null);
|
{
|
||||||
|
_asTablePriv = null;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
_asTablePriv = (a, b) => a == EntityType ? rule(b) : null;
|
||||||
}
|
}
|
||||||
public DbContextOptions DbContextOptions { get => _db.Options; set => _db.Options = value; }
|
public void AsTable(Func<Type, string, string> rule)
|
||||||
|
{
|
||||||
|
_asTablePriv = rule;
|
||||||
|
}
|
||||||
|
public DbContextOptions DbContextOptions { get => _db.Options; set => _db.Options = value; }
|
||||||
|
|
||||||
internal DbContextScopedFreeSql _ormScoped;
|
internal DbContextScopedFreeSql _ormScoped;
|
||||||
internal IFreeSql OrmOriginal => _ormScoped?._originalFsql;
|
internal IFreeSql OrmOriginal => _ormScoped?._originalFsql;
|
||||||
|
@ -24,11 +24,16 @@ namespace FreeSql
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="rule"></param>
|
/// <param name="rule"></param>
|
||||||
void AsTable(Func<string, string> rule);
|
void AsTable(Func<string, string> rule);
|
||||||
|
/// <summary>
|
||||||
|
/// 分表规则,参数:实体类型、旧表名;返回:新表名 https://github.com/2881099/FreeSql/wiki/Repository
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="rule"></param>
|
||||||
|
void AsTable(Func<Type, string, string> rule);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 设置 DbContext 选项
|
/// 设置 DbContext 选项
|
||||||
/// </summary>
|
/// </summary>
|
||||||
DbContextOptions DbContextOptions { get; set; }
|
DbContextOptions DbContextOptions { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface IBaseRepository<TEntity> : IBaseRepository
|
public interface IBaseRepository<TEntity> : IBaseRepository
|
||||||
|
@ -1104,82 +1104,6 @@
|
|||||||
</summary>
|
</summary>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
<member name="T:FreeSql.Extensions.DynamicEntity.DynamicCompileBuilder">
|
|
||||||
<summary>
|
|
||||||
动态创建实体类型
|
|
||||||
</summary>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.Extensions.DynamicEntity.DynamicCompileBuilder.#ctor(IFreeSql,System.String,System.Attribute[])">
|
|
||||||
<summary>
|
|
||||||
配置Class
|
|
||||||
</summary>
|
|
||||||
<param name="className">类名</param>
|
|
||||||
<param name="attributes">类标记的特性[Table(Name = "xxx")] [Index(xxxx)]</param>
|
|
||||||
<returns></returns>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.Extensions.DynamicEntity.DynamicCompileBuilder.Property(System.String,System.Type,System.Attribute[])">
|
|
||||||
<summary>
|
|
||||||
配置属性
|
|
||||||
</summary>
|
|
||||||
<param name="propertyName">属性名称</param>
|
|
||||||
<param name="propertyType">属性类型</param>
|
|
||||||
<param name="attributes">属性标记的特性-支持多个</param>
|
|
||||||
<returns></returns>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.Extensions.DynamicEntity.DynamicCompileBuilder.Property(System.String,System.Type,System.Boolean,System.Attribute[])">
|
|
||||||
<summary>
|
|
||||||
配置属性
|
|
||||||
</summary>
|
|
||||||
<param name="propertyName">属性名称</param>
|
|
||||||
<param name="propertyType">属性类型</param>
|
|
||||||
<param name="isOverride">该属性是否重写父类属性</param>
|
|
||||||
<param name="attributes">属性标记的特性-支持多个</param>
|
|
||||||
<returns></returns>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.Extensions.DynamicEntity.DynamicCompileBuilder.Property(System.String,System.Type,System.Boolean,System.Object,System.Attribute[])">
|
|
||||||
<summary>
|
|
||||||
配置属性
|
|
||||||
</summary>
|
|
||||||
<param name="propertyName">属性名称</param>
|
|
||||||
<param name="propertyType">属性类型</param>
|
|
||||||
<param name="isOverride">该属性是否重写父类属性</param>
|
|
||||||
<param name="defaultValue">属性默认值</param>
|
|
||||||
<param name="attributes">属性标记的特性-支持多个</param>
|
|
||||||
<returns></returns>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.Extensions.DynamicEntity.DynamicCompileBuilder.Extend(System.Type)">
|
|
||||||
<summary>
|
|
||||||
配置父类
|
|
||||||
</summary>
|
|
||||||
<param name="superClass">父类类型</param>
|
|
||||||
<returns></returns>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.Extensions.DynamicEntity.DynamicCompileBuilder.OverrideProperty(System.Reflection.Emit.TypeBuilder@,System.Reflection.Emit.MethodBuilder,FreeSql.Extensions.DynamicEntity.DynamicCompileBuilder.PropertyMethodEnum,System.String)">
|
|
||||||
<summary>
|
|
||||||
Override属性
|
|
||||||
</summary>
|
|
||||||
<param name="typeBuilder"></param>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.Extensions.DynamicEntity.DynamicCompileBuilder.Build">
|
|
||||||
<summary>
|
|
||||||
Emit动态创建出Class - Type
|
|
||||||
</summary>
|
|
||||||
<returns></returns>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.Extensions.DynamicEntity.DynamicCompileBuilder.FirstCharToLower(System.String)">
|
|
||||||
<summary>
|
|
||||||
首字母小写
|
|
||||||
</summary>
|
|
||||||
<param name="input"></param>
|
|
||||||
<returns></returns>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.Extensions.DynamicEntity.DynamicCompileBuilder.FirstCharToUpper(System.String)">
|
|
||||||
<summary>
|
|
||||||
首字母大写
|
|
||||||
</summary>
|
|
||||||
<param name="input"></param>
|
|
||||||
<returns></returns>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.Extensions.EntityUtil.EntityUtilExtensions.GetEntityKeyString(IFreeSql,System.Type,System.Object,System.Boolean,System.String)">
|
<member name="M:FreeSql.Extensions.EntityUtil.EntityUtilExtensions.GetEntityKeyString(IFreeSql,System.Type,System.Object,System.Boolean,System.String)">
|
||||||
<summary>
|
<summary>
|
||||||
获取实体的主键值,以 "*|_,[,_|*" 分割,当任意一个主键属性无值时,返回 null
|
获取实体的主键值,以 "*|_,[,_|*" 分割,当任意一个主键属性无值时,返回 null
|
||||||
@ -5884,28 +5808,6 @@
|
|||||||
请使用 fsql.InsertDict(dict) 方法插入字典数据
|
请使用 fsql.InsertDict(dict) 方法插入字典数据
|
||||||
</summary>
|
</summary>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:FreeSqlGlobalDynamicEntityExtensions.DynamicEntity(FreeSql.ICodeFirst,System.String,System.Attribute[])">
|
|
||||||
<summary>
|
|
||||||
动态构建Class Type
|
|
||||||
</summary>
|
|
||||||
<returns></returns>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSqlGlobalDynamicEntityExtensions.CreateInstance(FreeSql.Internal.Model.TableInfo,System.Collections.Generic.Dictionary{System.String,System.Object})">
|
|
||||||
<summary>
|
|
||||||
根据字典,创建 table 对应的实体对象
|
|
||||||
</summary>
|
|
||||||
<param name="table"></param>
|
|
||||||
<param name="dict"></param>
|
|
||||||
<returns></returns>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSqlGlobalDynamicEntityExtensions.CreateDictionary(FreeSql.Internal.Model.TableInfo,System.Object)">
|
|
||||||
<summary>
|
|
||||||
根据实体对象,创建 table 对应的字典
|
|
||||||
</summary>
|
|
||||||
<param name="table"></param>
|
|
||||||
<param name="instance"></param>
|
|
||||||
<returns></returns>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSqlGlobalExpressionCallExtensions.Between(System.DateTime,System.DateTime,System.DateTime)">
|
<member name="M:FreeSqlGlobalExpressionCallExtensions.Between(System.DateTime,System.DateTime,System.DateTime)">
|
||||||
<summary>
|
<summary>
|
||||||
C#: that >= between && that <= and<para></para>
|
C#: that >= between && that <= and<para></para>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user