public bool Exists <TEntity>(ICommandTunnel tunnel = null) { var command = this._engine.Provider.SqlFactory.CreateExistsCommand(TypeMapper.Instance <TEntity> .Mapper, this._where, tunnel); var r = this._engine.Execute(command).ToScalar(); return(r != null); }
public override ExecuteCommand CreateLastIdentityCommand(TypeMapper mapper, ICommandTunnel tunnel = null) { if (tunnel == null) { tunnel = Empty; } return(tunnel.GetCommand(mapper, new ExecuteCommand("SELECT last_insert_rowid()"))); }
/// <summary> /// 获取最后递增序列值。 /// </summary> /// <param name="engine">数据源查询与交互引擎的实例。</param> /// <param name="tunnel">用于个性化表名和命令的暗道,可以为 null 值。</param> /// <returns>递增序列值。</returns> public static long GetLastIdentity <TEntity>(this IDbEngine engine, ICommandTunnel tunnel = null) { if (engine == null) { throw new ArgumentNullException(nameof(engine)); } var command = engine.Provider.SqlFactory.CreateLastIdentityCommand(TypeMapper.Instance <TEntity> .Mapper, tunnel); return(engine.Execute(command).ToScalar <long>()); }
public PageData <TView> FindAll <TEntity, TView>(IPagination page, ICommandTunnel tunnel = null) { if (page == null) { throw new ArgumentNullException(nameof(page)); } var command = this._engine.Provider.SqlFactory.CreateQueryCommand(TypeMapper.Instance <TEntity> .Mapper, TypeMapper.Instance <TView> .Mapper, this._where, 0, tunnel); return(this._engine.Execute(command).ToEntities <TView>(page)); }
public List <TView> FindAll <TEntity, TView>(Func <TEntity, TView> select, ICommandTunnel tunnel = null) { if (select == null) { return(this.FindAll <TEntity, TView>(tunnel)); } var atObj = new AnonymousTypeObject <TView>(); var command = this._engine.Provider.SqlFactory.CreateQueryCommand(TypeMapper.Instance <TEntity> .Mapper, atObj.Fields, this._where, 0, tunnel); var entities = this._engine.Execute(command).ToEntities(); return((from item in entities select atObj.Create(item as DynamicEntityValue)).ToList()); }
/// <summary> /// 指定类型映射器创建一个获取最后递增序列值的命令。 /// </summary> /// <param name="mapper">类型映射器。</param> /// <param name="tunnel">用于个性化表名和命令的暗道,可以为 null 值。</param> /// <returns>查询命令。</returns> public virtual ExecuteCommand CreateLastIdentityCommand(TypeMapper mapper, ICommandTunnel tunnel = null) { if (mapper == null) { throw new ArgumentNullException(nameof(mapper)); } if (tunnel == null) { tunnel = Empty; } return(tunnel.GetCommand(mapper, new ExecuteCommand("SELECT @@IDENTITY"))); }
public TView FindOne <TEntity, TView>(Func <TEntity, TView> select, ICommandTunnel tunnel = null) { if (select == null) { return(this.FindOne <TEntity, TView>(tunnel)); } var atObj = new AnonymousTypeObject <TView>(); var command = this._engine.Provider.SqlFactory.CreateQueryCommand(TypeMapper.Instance <TEntity> .Mapper, atObj.Fields, this._where, 1, tunnel); var entity = this._engine.Execute(command).ToEntity(); if (entity == null) { return(default(TView)); } return(atObj.Create(entity as DynamicEntityValue)); }
/// <summary> /// 指定类型映射器创建一个获取最后递增序列值的命令。 /// </summary> /// <param name="mapper">类型映射器。</param> /// <param name="tunnel">用于个性化表名和命令的暗道,可以为 null 值。</param> /// <returns>一个查询命令。</returns> public virtual ExecuteCommand CreateLastIdentityCommand(TypeMapper mapper, ICommandTunnel tunnel = null) { if(mapper == null) throw new ArgumentNullException(nameof(mapper)); if(tunnel == null) tunnel = Empty; return tunnel.GetCommand(mapper, new ExecuteCommand("SELECT @@IDENTITY")); }
public long RowCount <TEntity>(ICommandTunnel tunnel = null) => this._bus.Call(new CMD.RowCount <TEntity> { Where = this._where, Tunnel = tunnel });
/// <summary> /// 获取指定 <paramref name="keyValue"/> 值的数据源对象。 /// </summary> /// <typeparam name="TEntity">实体的数据类型。</typeparam> /// <typeparam name="TView">视图的数据类型。</typeparam> /// <param name="engine">数据源查询与交互引擎的实例。</param> /// <param name="keyValue">主键的列值。</param> /// <param name="select">视图选择器。可以为 null 值,表示不采用匿名对象的方式。</param> /// <param name="tunnel">用于个性化表名和命令的暗道,可以为 null 值。</param> /// <returns>实体。</returns> public static TView FindOne <TEntity, TView>(this IDbEngine engine, object keyValue, Func <TEntity, TView> select, ICommandTunnel tunnel = null) => FindOne(engine, null, keyValue, select, tunnel);
/// <summary> /// 判断指定的主键的列名的值是否已存在。 /// </summary> /// <typeparam name="TEntity">实体的数据类型。</typeparam> /// <param name="engine">数据源查询与交互引擎的实例。</param> /// <param name="keyValue">主键的列值。</param> /// <param name="tunnel">用于个性化表名和命令的暗道,可以为 null 值。</param> /// <returns>表示数据是否存在。</returns> public static bool Exists <TEntity>(this IDbEngine engine, object keyValue, ICommandTunnel tunnel = null) => Exists <TEntity>(engine, null, keyValue, tunnel);
/// <summary> /// 执行一个更新的命令,可以是匿名对象的部分成员(<paramref name="entity"/> 属性成员和 <typeparamref name="TEntity"/> 属性成员必须一致)。 /// </summary> /// <typeparam name="TEntity">实体的数据类型。</typeparam> /// <param name="engine">数据源查询与交互引擎的实例。</param> /// <param name="entity">实体的实例对象,可以是匿名对象的部分成员(<paramref name="entity"/> 属性成员和 <typeparamref name="TEntity"/> 属性成员必须一致)。</param> /// <param name="tunnel">用于个性化表名和命令的暗道,可以为 null 值。</param> /// <returns>受影响的行。</returns> public static int ModifyAnonymous <TEntity>(this IDbEngine engine, object entity, ICommandTunnel tunnel = null) => Filter(engine, GetModifyKeyValues <TEntity>(entity)).Modify <TEntity>(entity, tunnel);
/// <summary> /// 执行一个删除的命令,在删除命令中 <paramref name="entityOrPKValues"/> 可以是主键的值(表只有一个主键),也可以是匿名对象的部分成员(<paramref name="entityOrPKValues"/> 属性成员和 <typeparamref name="TEntity"/> 属性成员必须一致)。 /// </summary> /// <typeparam name="TEntity">实体的数据类型。</typeparam> /// <param name="engine">数据源查询与交互引擎的实例。</param> /// <param name="entityOrPKValues">实体的实例对象,在删除命令中 <paramref name="entityOrPKValues"/> 可以是主键的值(表只有一个主键,值允许是一个数组,表示删除多条记录),也可以是匿名对象的部分成员(<paramref name="entityOrPKValues"/> 属性成员和 <typeparamref name="TEntity"/> 属性成员必须一致)。</param> /// <param name="tunnel">用于个性化表名和命令的暗道,可以为 null 值。</param> /// <returns>受影响的行。</returns> public static int RemoveAnonymous <TEntity>(this IDbEngine engine, object entityOrPKValues, ICommandTunnel tunnel = null) => Filter(engine, GetRemoveWhere <TEntity>(engine, entityOrPKValues)).Remove <TEntity>(tunnel);
public bool Exists <TEntity>(ICommandTunnel tunnel = null) => this._bus.Call(new CMD.Exists <TEntity> { Where = this._where, Tunnel = tunnel });
/// <summary> /// 执行一个插入的命令,可以是匿名对象的部分成员(<paramref name="entity"/> 属性成员和 <typeparamref name="TEntity"/> 属性成员必须一致)。 /// </summary> /// <typeparam name="TEntity">实体的数据类型。</typeparam> /// <param name="engine">数据源查询与交互引擎的实例。</param> /// <param name="entity">实体的实例对象,可以是匿名对象的部分成员(<paramref name="entity"/> 属性成员和 <typeparamref name="TEntity"/> 属性成员必须一致)。</param> /// <param name="tunnel">用于个性化表名和命令的暗道,可以为 null 值。</param> /// <returns>受影响的行。</returns> public static int AddAnonymous <TEntity>(this IDbEngine engine, object entity, ICommandTunnel tunnel = null) { if (engine == null) { throw new ArgumentNullException(nameof(engine)); } if (entity == null) { throw new ArgumentNullException(nameof(entity)); } var command = engine.Provider.SqlFactory.CreateInsertCommand(TypeMapper.Instance <TEntity> .Mapper, entity, tunnel); return(engine.Execute(command).ToNonQuery()); }
/// <summary> /// 指定类型映射器和条件参数创建一个表总行数的命令。 /// </summary> /// <param name="mapper">类型映射器。</param> /// <param name="where">条件参数。</param> /// <param name="tunnel">用于个性化表名和命令的暗道,可以为 null 值。</param> /// <returns>一个查询命令。</returns> public virtual ExecuteCommand CreateRowCountCommand(TypeMapper mapper, WhereParameters where, ICommandTunnel tunnel = null) { if(mapper == null) throw new ArgumentNullException(nameof(mapper)); if(where == null) throw new ArgumentNullException(nameof(where)); if(tunnel == null) tunnel = Empty; var commandText = "SELECT COUNT(*) FROM " + this.EscapeName(tunnel.GetTableName(mapper), NamePoint.Table); return tunnel.GetCommand(mapper, new ExecuteCommand(where.AppendTo(commandText), where.Parameters)); }
public override ExecuteCommand CreateLastIdentityCommand(TypeMapper mapper, ICommandTunnel tunnel = null) { if(tunnel == null) tunnel = Empty; return tunnel.GetCommand(mapper, new ExecuteCommand("SELECT last_insert_rowid()")); }
/// <summary> /// 指定实体类型映射器、视图映射器和条件创建一个查询的命令。 /// </summary> /// <param name="entityMapper">实体的类型映射器。</param> /// <param name="viewMapper">视图的类型映射器。</param> /// <param name="where">条件参数。</param> /// <param name="top">指定 TOP 数量,小于 1 则忽略作用。</param> /// <param name="tunnel">用于个性化表名和命令的暗道,可以为 null 值。</param> /// <returns>一个查询命令。</returns> public virtual ExecuteCommand CreateQueryCommand(TypeMapper entityMapper, TypeMapper viewMapper, WhereParameters where, int top = 0, ICommandTunnel tunnel = null) { if(where == null) throw new ArgumentNullException(nameof(where)); if(tunnel == null) tunnel = Empty; var fields = this.CreateFields(entityMapper, viewMapper); if(top > 0) fields = string.Concat("TOP ", top.ToString(), " ", fields); var commandText = string.Concat("SELECT ", fields, " FROM ", this.EscapeName(tunnel.GetTableName(entityMapper), NamePoint.Table)); return tunnel.GetCommand(entityMapper, new ExecuteCommand(where.AppendTo(commandText), where.Parameters)); }
/// <summary> /// 指定类型映射器和实体创建一个更新的命令。 /// </summary> /// <param name="mapper">类型映射器。</param> /// <param name="entity">实体的实例对象。</param> /// <param name="where">条件参数。</param> /// <param name="tunnel">用于个性化表名和命令的暗道,可以为 null 值。</param> /// <returns>一个查询命令。</returns> public virtual ExecuteCommand CreateUpdateCommand(TypeMapper mapper, object entity, WhereParameters where, ICommandTunnel tunnel = null) { if(mapper == null) throw new ArgumentNullException(nameof(mapper)); if(entity == null) throw new ArgumentNullException(nameof(entity)); if(where == null) throw new ArgumentNullException(nameof(where)); if(tunnel == null) tunnel = Empty; var setBuilder = new StringBuilder("UPDATE ") .Append(this.EscapeName(tunnel.GetTableName(mapper), NamePoint.Table)) .Append(" SET "); var ps = where.Parameters ?? new ExecuteParameterCollection(mapper.Count); int index = 0; foreach(var property in FindProperties(mapper, ref entity)) { if(property.IsIgnore || property.IsKey) continue; if(index++ > 0) setBuilder.Append(','); setBuilder.Append(this.EscapeName(property.Name, NamePoint.Field)) .Append('='); var value = property.GetValue(entity); this.AppendParameterValue(property, setBuilder, value, ps); } if(index==0) throw new NotSupportedException($"{entity.GetType().FullName} 的更新操作没有找到任何属性。"); return tunnel.GetCommand(mapper, new ExecuteCommand(where.AppendTo(setBuilder.ToString()), ps)); }
/// <summary> /// 指定类型映射器和实体创建一个插入的命令。 /// </summary> /// <param name="mapper">类型映射器。</param> /// <param name="entity">实体的实例对象。</param> /// <param name="tunnel">用于个性化表名和命令的暗道,可以为 null 值。</param> /// <returns>一个查询命令。</returns> public virtual ExecuteCommand CreateInsertCommand(TypeMapper mapper, object entity, ICommandTunnel tunnel = null) { if(mapper == null) throw new ArgumentNullException(nameof(mapper)); if(entity == null) throw new ArgumentNullException(nameof(entity)); if(tunnel == null) tunnel = Empty; if(mapper.Count == 0) throw new NotSupportedException($"{entity.GetType().FullName} 的插入操作没有找到任何属性。"); var fieldsBuilder = new StringBuilder("INSERT INTO ") .Append(this.EscapeName(tunnel.GetTableName(mapper), NamePoint.Table)) .Append('('); var valueBuilder = new StringBuilder(")VALUES("); var ps = new ExecuteParameterCollection(mapper.Count); int index = 0; foreach(var property in FindProperties(mapper, ref entity)) { if(property.IsIgnore) continue; var value = property.GetValue(entity); if(property.IsKey && object.Equals(value, property.TypeDefaultValue)) continue; if(index++ > 0) { fieldsBuilder.Append(','); valueBuilder.Append(','); } fieldsBuilder.Append(this.EscapeName(property.Name, NamePoint.Field)); this.AppendParameterValue(property, valueBuilder, value, ps); } return tunnel.GetCommand(mapper, new ExecuteCommand(fieldsBuilder.Append(valueBuilder.Append(')').ToString()).ToString(), ps)); }
public List <TView> FindAll <TEntity, TView>(Func <TEntity, TView> select, ICommandTunnel tunnel = null) => this._bus.Call(new CMD.FindAll <TEntity, TView> { Where = this._where, Select = select, Tunnel = tunnel });
public List <TEntity> FindAll <TEntity>(ICommandTunnel tunnel = null) => this.FindAll <TEntity, TEntity>(tunnel);
public PageData <TView> FindAll <TEntity, TView>(Func <TEntity, TView> select, IPagination page, ICommandTunnel tunnel = null) => this._bus.Call(new CMD.FindAllPage <TEntity, TView> { Where = this._where, Select = select, Page = page, Tunnel = tunnel });
public PageData <TEntity> FindAll <TEntity>(IPagination page, ICommandTunnel tunnel = null) => this.FindAll <TEntity, TEntity>(page, tunnel);
/// <summary> /// 执行一个更新的命令。 /// </summary> /// <typeparam name="TEntity">实体的数据类型。</typeparam> /// <param name="engine">数据源查询与交互引擎的实例。</param> /// <param name="entity">实体的实例对象。</param> /// <param name="tunnel">用于个性化表名和命令的暗道,可以为 null 值。</param> /// <returns>受影响的行。</returns> public static int Modify <TEntity>(this IDbEngine engine, TEntity entity, ICommandTunnel tunnel = null) => ModifyAnonymous <TEntity>(engine, entity, tunnel);
public TEntity FindOne <TEntity>(ICommandTunnel tunnel = null) => this.FindOne <TEntity, TEntity>(tunnel);
/// <summary> /// 执行一个删除的命令。 /// </summary> /// <typeparam name="TEntity">实体的数据类型。</typeparam> /// <param name="engine">数据源查询与交互引擎的实例。</param> /// <param name="entity">实体的实例对象。</param> /// <param name="tunnel">用于个性化表名和命令的暗道,可以为 null 值。</param> /// <returns>受影响的行。</returns> public static int Remove <TEntity>(this IDbEngine engine, TEntity entity, ICommandTunnel tunnel = null) => RemoveAnonymous <TEntity>(engine, entity, tunnel);
/// <summary> /// 获取数据表的总行数。 /// </summary> /// <typeparam name="TEntity">实体的数据类型。</typeparam> /// <param name="engine">数据源查询与交互引擎的实例。</param> /// <param name="tunnel">用于个性化表名和命令的暗道,可以为 null 值。</param> /// <returns>数据的行数。</returns> public static long RowCount <TEntity>(this IDbEngine engine, ICommandTunnel tunnel = null) => Filter(engine).RowCount <TEntity>(tunnel);
/// <summary> /// 获取指定 <paramref name="keyName"/> 键值的数据源对象。 /// </summary> /// <typeparam name="TEntity">实体的数据类型。</typeparam> /// <param name="engine">数据源查询与交互引擎的实例。</param> /// <param name="keyName">主键的列名。可以为 null 值。</param> /// <param name="keyValue">主键的列值。</param> /// <param name="tunnel">用于个性化表名和命令的暗道,可以为 null 值。</param> /// <returns>实体。</returns> public static TEntity FindOne <TEntity>(this IDbEngine engine, string keyName, object keyValue, ICommandTunnel tunnel = null) => FindOne <TEntity, TEntity>(engine, keyName, keyValue, tunnel);
public Task <List <TView> > FindAllAsync <TEntity, TView>(ICommandTunnel tunnel = null) { var command = this._engine.Provider.SqlFactory.CreateQueryCommand(TypeMapper.Instance <TEntity> .Mapper, TypeMapper.Instance <TView> .Mapper, this._where, 0, tunnel); return(this._engine.Execute(command).ToEntitiesAsync <TView>()); }
/// <summary> /// 获取指定 <paramref name="keyName"/> 键值的数据源对象。 /// </summary> /// <typeparam name="TEntity">实体的数据类型。</typeparam> /// <typeparam name="TView">视图的数据类型。</typeparam> /// <param name="engine">数据源查询与交互引擎的实例。</param> /// <param name="keyName">主键的列名。可以为 null 值。</param> /// <param name="keyValue">主键的列值。</param> /// <param name="select">视图选择器。可以为 null 值,表示不采用匿名对象的方式。</param> /// <param name="tunnel">用于个性化表名和命令的暗道,可以为 null 值。</param> /// <returns>实体。</returns> public static TView FindOne <TEntity, TView>(this IDbEngine engine, string keyName, object keyValue, Func <TEntity, TView> select, ICommandTunnel tunnel = null) => Filter(engine, GetKeyValues <TEntity>(keyName, keyValue)).FindOne(select, tunnel);
public int Remove <TEntity>(ICommandTunnel tunnel = null) => this._bus.Call(new CMD.Remove <TEntity> { Where = this._where, Tunnel = tunnel });
/// <summary> /// 判断指定的主键的列名的值是否已存在。 /// </summary> /// <typeparam name="TEntity">实体的数据类型。</typeparam> /// <param name="engine">数据源查询与交互引擎的实例。</param> /// <param name="keyName">主键的列名。</param> /// <param name="keyValue">主键的列值。</param> /// <param name="tunnel">用于个性化表名和命令的暗道,可以为 null 值。</param> /// <returns>表示数据是否存在。</returns> public static bool Exists <TEntity>(this IDbEngine engine, string keyName, object keyValue, ICommandTunnel tunnel = null) => Filter(engine, GetKeyValues <TEntity>(keyName, keyValue)).Exists <TEntity>(tunnel);
public Task <PageData <TEntity> > FindAllAsync <TEntity>(IPagination page, ICommandTunnel tunnel = null) => this.FindAllAsync <TEntity, TEntity>(page, tunnel);
public TView FindOne <TEntity, TView>(ICommandTunnel tunnel = null) => this._bus.Call(new CMD.FindOne <TEntity, TView> { Where = this._where, Tunnel = tunnel });
public int Modify <TEntity>(object entity, ICommandTunnel tunnel = null) => this._bus.Call(new CMD.Modify <TEntity> { Where = this._where, Entity = entity, Tunnel = tunnel });