/// <summary> /// 构造函数 /// </summary> /// <param name="entityType">实体类型</param> /// <param name="runtime">Dapper运行时</param> public CrudSqlSegments(Type entityType, DapperRuntime runtime) { Guard.ArgumentNotNull(entityType, nameof(entityType)); var metadata = runtime.GetMetadata(entityType); _insertSqlLazy = new Lazy <string>(() => GenerateInsertSql(entityType, runtime, metadata)); _updateSqlLazy = new Lazy <string>(() => GenerateUpdateSql(entityType, runtime, metadata)); _deleteSqlLazy = new Lazy <string>(() => GenerateDeleteSql(entityType, runtime, metadata)); _selectSqlLazy = new Lazy <string>(() => GenerateSelectSql(entityType, runtime, metadata)); }
/// <summary> /// 生成删除的SQL语句 /// </summary> /// <param name="entityType">实体类型</param> /// <param name="runtime">Dapper运行时</param> /// <param name="metadata">Dapper元数据</param> /// <returns></returns> private static string GenerateDeleteSql(Type entityType, DapperRuntime runtime, DapperMetadata metadata) { string whereSeg = KeyDelimitSegment(entityType, runtime, metadata); StringBuilder sqlBuilder = new StringBuilder(); sqlBuilder.Append("DELETE FROM "); sqlBuilder.Append($"{runtime.DelimitIdentifier(entityType, metadata.TableName)} "); if (!string.IsNullOrWhiteSpace(whereSeg)) { sqlBuilder.Append(" WHERE "); sqlBuilder.Append(whereSeg); } return(sqlBuilder.ToString()); }
/// <summary> /// 生成查询的SQL语句 /// </summary> /// <param name="entityType">实体类型</param> /// <param name="runtime">Dapper运行时</param> /// <param name="metadata">Dapper元数据</param> /// <returns></returns> private static string GenerateSelectSql(Type entityType, DapperRuntime runtime, DapperMetadata metadata) { string columnsSetSeg = metadata.Fields.Where(f => !f.Ignore).OrderBy(x => x.Field.Name) .Select(k => runtime.DelimitIdentifier(entityType, k.Name)).ToArrayString(", "); StringBuilder sqlBuilder = new StringBuilder(); sqlBuilder.Append("SELECT "); sqlBuilder.Append(columnsSetSeg); sqlBuilder.Append(" FROM "); sqlBuilder.Append($"{runtime.DelimitIdentifier(entityType, metadata.TableName)}"); return(sqlBuilder.ToString()); }
/// <summary> /// 生成插入的SQL语句 /// </summary> /// <param name="entityType">实体类型</param> /// <param name="runtime">Dapper运行时</param> /// <param name="metadata">Dapper元数据</param> /// <returns></returns> private static string GenerateInsertSql(Type entityType, DapperRuntime runtime, DapperMetadata metadata) { var fields = metadata.Fields.Where(f => !f.Ignore && !f.AutoGeneration).OrderBy(x => x.Field.Name).ToArray(); string columns = fields.Select(k => runtime.DelimitIdentifier(entityType, k.Name)).ToArrayString(", "); string parameters = fields.Select(k => $"{runtime.DelimitParameter(entityType, k.Field.Name)}").ToArrayString(", "); StringBuilder sqlBuilder = new StringBuilder(); sqlBuilder.Append("INSERT INTO "); sqlBuilder.Append($"{runtime.DelimitIdentifier(entityType, metadata.TableName)} "); sqlBuilder.Append($"({columns}) "); sqlBuilder.Append(" VALUES "); sqlBuilder.Append($"({parameters})"); return(sqlBuilder.ToString()); }
private DapperRuntime GetDapperRuntime() { Mock <IOptions <DapperDatabaseOptions> > optionsMock = new Mock <IOptions <DapperDatabaseOptions> >(); optionsMock.Setup(o => o.Value).Returns(new DapperDatabaseOptions { DefaultConnectionName = "default", ConnectionStrings = new Dictionary <string, string> { { "default", helper.ConnectionString } } }); DapperRuntime rt = new DapperRuntime(optionsMock.Object, new IDapperMetadataProvider[] { new DapperMetadataProviderComKeyInstance() }); return(rt); }
private DapperSqlGenerator MockGenerator() { var dbProvider = new MySqlDatabaseProvider(); Mock <IOptions <DapperDatabaseOptions> > optionsMock = new Mock <IOptions <DapperDatabaseOptions> >(); optionsMock.Setup(o => o.Value).Returns(new DapperDatabaseOptions { DefaultConnectionName = "default", ConnectionStrings = new Dictionary <string, string> { { "default", MySqlConnectionString.Value } } }); DapperRuntime rt = new DapperRuntime(optionsMock.Object, new IDapperMetadataProvider[] { new DapperMetadataProviderInstance() }); return(new DapperSqlGenerator(rt)); }
private CrudSqlSegments MockCrudSqlSegments() { var dbProvider = new MySqlDatabaseProvider(); Mock <IOptions <DapperDatabaseOptions> > optionsMock = new Mock <IOptions <DapperDatabaseOptions> >(); optionsMock.Setup(o => o.Value).Returns(new DapperDatabaseOptions { DefaultConnectionName = "default", ConnectionStrings = new Dictionary <string, string> { { "default", MySqlConnectionString.Value } } }); DapperRuntime rt = new DapperRuntime(optionsMock.Object, new IDapperMetadataProvider[] { new TestEntityMetadataProvider() }); CrudSqlSegments seg = new CrudSqlSegments(typeof(TestEntity), rt); return(seg); }
/// <summary> /// 生成更新的SQL语句 /// </summary> /// <param name="entityType">实体类型</param> /// <param name="runtime">Dapper运行时</param> /// <param name="metadata">Dapper元数据</param> /// <returns></returns> private static string GenerateUpdateSql(Type entityType, DapperRuntime runtime, DapperMetadata metadata) { var fields = metadata.Fields.Where(f => !f.IsKey && !f.AutoGeneration && !f.Ignore).OrderBy(x => x.Field.Name).ToArray(); string columnsSetSeg = fields.Select(k => $"{runtime.DelimitIdentifier(entityType, k.Name)} = {runtime.DelimitParameter(entityType, k.Field.Name)}").ToArrayString(", "); string whereSeg = KeyDelimitSegment(entityType, runtime, metadata); StringBuilder sqlBuilder = new StringBuilder(); sqlBuilder.Append("UPDATE "); sqlBuilder.Append($"{runtime.DelimitIdentifier(entityType, metadata.TableName)} "); sqlBuilder.Append("SET "); sqlBuilder.Append(columnsSetSeg); if (!string.IsNullOrWhiteSpace(whereSeg)) { sqlBuilder.Append(" WHERE "); sqlBuilder.Append(whereSeg); } return(sqlBuilder.ToString()); }
private DapperRepository <DapperAllTest> MockGenerator() { var dbProvider = new MySqlDatabaseProvider(); Mock <IOptions <DapperDatabaseOptions> > optionsMock = new Mock <IOptions <DapperDatabaseOptions> >(); optionsMock.Setup(o => o.Value).Returns(new DapperDatabaseOptions { DefaultConnectionName = "default", ConnectionStrings = new Dictionary <string, string> { { "default", helper.ConnectionString } } }); LoggerFactory loggerFactory = new LoggerFactory(); loggerFactory.AddDebug(LogLevel.Trace); DapperRuntime rt = new DapperRuntime(optionsMock.Object, new IDapperMetadataProvider[] { new DapperMetadataProviderInstance() }); _testContext = new DapperContext(rt, loggerFactory); return(new DapperRepository <DapperAllTest>(_testContext)); }
private DapperRepository <SQLiteDapperTestEntity> MockGenerator() { var optionsMock = new Mock <IOptions <DapperDatabaseOptions> >(); optionsMock.Setup(o => o.Value).Returns(new DapperDatabaseOptions { DefaultConnectionName = "default", DefaultDatabaseProvider = typeof(SQLiteDatabaseProvider), ConnectionStrings = new Dictionary <string, string> { { "default", ConnectionString } } }); var loggerFactory = new LoggerFactory(); loggerFactory.AddDebug(LogLevel.Trace); var rt = new DapperRuntime(optionsMock.Object, new IDapperMetadataProvider[] { new DapperMetadataProviderInstance() }); _testContext = new DapperContext(rt, loggerFactory); return(new DapperRepository <SQLiteDapperTestEntity>(_testContext)); }
private DapperRoleStoreImp MockGenerator() { Mock <IOptions <DapperDatabaseOptions> > optionsMock = new Mock <IOptions <DapperDatabaseOptions> >(); optionsMock.Setup(o => o.Value).Returns(new DapperDatabaseOptions { DefaultConnectionName = "default", ConnectionStrings = new Dictionary <string, string> { { "default", helper.ConnectionString } } }); LoggerFactory loggerFactory = new LoggerFactory(); loggerFactory.AddDebug(LogLevel.Trace); DapperRuntime rt = new DapperRuntime(optionsMock.Object, new IDapperMetadataProvider[] { new DapperMetadataProviderRoleBase() }); DapperRepository <RoleBase> dpRoleBase = new DapperRepository <RoleBase>(context1 = new DapperContext(rt, loggerFactory), loggerFactory); DapperRuntime rt1 = new DapperRuntime(optionsMock.Object, new IDapperMetadataProvider[] { new DapperMetadataProviderRoleClaim() }); DapperRepository <RoleClaim> dpRoleClaim = new DapperRepository <RoleClaim>(context2 = new DapperContext(rt1, loggerFactory), loggerFactory); return(new DapperRoleStoreImp(new IIdGenerationServiceImp(), dpRoleBase, dpRoleClaim)); }
/// <summary> /// 使用界定符包围T-SQL中的参数字符串。 /// </summary> /// <param name="entityType">实体类型</param> /// <param name="runtime">Dapper运行时</param> /// <param name="metadata">Dapper元数据</param> /// <returns></returns> private static string KeyDelimitSegment(Type entityType, DapperRuntime runtime, DapperMetadata metadata) { return(metadata.Fields.Where(f => f.IsKey).Select(k => $"{runtime.DelimitIdentifier(entityType, k.Name)} = {runtime.DelimitParameter(entityType, k.Field.Name)}").ToArrayString(" AND ")); }
private WorkContext MockWorkContext(DapperRuntime rt) { return(new TestWorkContext(rt)); }
public TestWorkContext(DapperRuntime runtime) : base() { _runtime = runtime; _loggerFactory.AddDebug(LogLevel.Trace); }