Dreamine.Database.SqlServer 1.0.1
Dreamine.Database.SqlServer 데이터베이스 기능과 관련 API를 제공합니다.
로딩중...
검색중...
일치하는것 없음
Dreamine.Database.SqlServer.SqlServerDatabaseProvider 클래스 참조sealed

더 자세히 ...

Dreamine.Database.SqlServer.SqlServerDatabaseProvider에 대한 상속 다이어그램 :
Dreamine.Database.SqlServer.SqlServerDatabaseProvider에 대한 협력 다이어그램:

Public 멤버 함수

 SqlServerDatabaseProvider (string connectionString)
override void EnsureDatabaseExists ()
override async Task EnsureDatabaseExistsAsync (CancellationToken cancellationToken=default)
override bool IsTableExists (string tableName)
override async Task< bool > IsTableExistsAsync (string tableName, CancellationToken cancellationToken=default)

Protected 멤버 함수

override IDbConnection CreateConnection ()
override string QuoteIdentifier (string identifier)
override string BuildCreateTableSql (DatabaseEntityMap map)
override string GetSqlType (DatabasePropertyMap property)

속성

override DatabaseProviderKind Kind [get]

정적 Private 멤버 함수

static string EscapeSqlLiteral (string value)

상세한 설명

SQL Server용 Dreamine 데이터베이스 공급자 구현을 제공합니다.

SqlServerDatabaseProvider.cs 파일의 17 번째 라인에서 정의되었습니다.

생성자 & 소멸자 문서화

◆ SqlServerDatabaseProvider()

Dreamine.Database.SqlServer.SqlServerDatabaseProvider.SqlServerDatabaseProvider ( string connectionString)
inline

지정한 연결 문자열로 SqlServerDatabaseProvider의 새 인스턴스를 초기화합니다.

매개변수
connectionStringSQL Server 연결 문자열입니다.
예외
ArgumentNullExceptionconnectionStringnull인 경우 발생합니다.
ArgumentExceptionconnectionString 이 비어 있거나 공백인 경우 발생합니다.

SqlServerDatabaseProvider.cs 파일의 51 번째 라인에서 정의되었습니다.

52 : base(connectionString)
53 {
54 }

멤버 함수 문서화

◆ BuildCreateTableSql()

override string Dreamine.Database.SqlServer.SqlServerDatabaseProvider.BuildCreateTableSql ( DatabaseEntityMap map)
inlineprotected

IDENTITY 키를 지원하는 SQL Server CREATE TABLE SQL을 만듭니다.

매개변수
map테이블 엔터티 매핑입니다.
반환값
조건부 SQL Server CREATE TABLE SQL입니다.

SqlServerDatabaseProvider.cs 파일의 353 번째 라인에서 정의되었습니다.

354 {
355 var columns = map.Properties.Select(property =>
356 {
357 var sql = $"{QuoteIdentifier(property.ColumnName)} {GetSqlType(property)}";
358 if (property.IsKey)
359 {
360 sql += property.IsGenerated ? " IDENTITY(1,1) PRIMARY KEY" : " PRIMARY KEY";
361 }
362
363 return sql;
364 });
365
366 return $"""
367 IF OBJECT_ID(N'{map.TableName}', N'U') IS NULL
368 CREATE TABLE {QuoteIdentifier(map.TableName)} ({string.Join(", ", columns)})
369 """;
370 }

◆ CreateConnection()

override IDbConnection Dreamine.Database.SqlServer.SqlServerDatabaseProvider.CreateConnection ( )
inlineprotected

구성된 연결 문자열을 사용하는 새 SQL Server 연결을 만듭니다.

반환값
닫힌 SQL Server 연결입니다.

SqlServerDatabaseProvider.cs 파일의 278 번째 라인에서 정의되었습니다.

279 {
280 return new SqlConnection(ConnectionString);
281 }

◆ EnsureDatabaseExists()

override void Dreamine.Database.SqlServer.SqlServerDatabaseProvider.EnsureDatabaseExists ( )
inline

연결 문자열에 지정된 SQL Server 데이터베이스가 없으면 생성합니다.

SqlServerDatabaseProvider.cs 파일의 74 번째 라인에서 정의되었습니다.

75 {
76 var builder = new SqlConnectionStringBuilder(ConnectionString);
77 var databaseName = builder.InitialCatalog;
78 if (string.IsNullOrWhiteSpace(databaseName))
79 {
80 base.EnsureDatabaseExists();
81 return;
82 }
83
84 builder.InitialCatalog = "master";
85
86 using var connection = new SqlConnection(builder.ConnectionString);
87 connection.Open();
88
89 using var command = connection.CreateCommand();
90 command.CommandText = $"""
91 IF DB_ID(N'{EscapeSqlLiteral(databaseName)}') IS NULL
92 CREATE DATABASE {QuoteIdentifier(databaseName)}
93 """;
94 command.ExecuteNonQuery();
95 }

◆ EnsureDatabaseExistsAsync()

override async Task Dreamine.Database.SqlServer.SqlServerDatabaseProvider.EnsureDatabaseExistsAsync ( CancellationToken cancellationToken = default)
inline

연결 문자열에 지정된 SQL Server 데이터베이스가 없으면 비동기적으로 생성합니다.

매개변수
cancellationToken작업 취소 토큰입니다.
반환값
데이터베이스 확인 및 생성 작업입니다.

SqlServerDatabaseProvider.cs 파일의 121 번째 라인에서 정의되었습니다.

122 {
123 var builder = new SqlConnectionStringBuilder(ConnectionString);
124 var databaseName = builder.InitialCatalog;
125 if (string.IsNullOrWhiteSpace(databaseName))
126 {
127 await base.EnsureDatabaseExistsAsync(cancellationToken).ConfigureAwait(false);
128 return;
129 }
130
131 builder.InitialCatalog = "master";
132
133 await using var connection = new SqlConnection(builder.ConnectionString);
134 await connection.OpenAsync(cancellationToken).ConfigureAwait(false);
135
136 await using var command = connection.CreateCommand();
137 command.CommandText = $"""
138 IF DB_ID(N'{EscapeSqlLiteral(databaseName)}') IS NULL
139 CREATE DATABASE {QuoteIdentifier(databaseName)}
140 """;
141 await command.ExecuteNonQueryAsync(cancellationToken).ConfigureAwait(false);
142 }

◆ EscapeSqlLiteral()

string Dreamine.Database.SqlServer.SqlServerDatabaseProvider.EscapeSqlLiteral ( string value)
inlinestaticprivate

SQL 문자열 리터럴에 포함될 작은따옴표를 이스케이프합니다.

매개변수
value이스케이프할 값입니다.
반환값
작은따옴표가 이스케이프된 값입니다.

SqlServerDatabaseProvider.cs 파일의 472 번째 라인에서 정의되었습니다.

473 {
474 return value.Replace("'", "''", StringComparison.Ordinal);
475 }

◆ GetSqlType()

override string Dreamine.Database.SqlServer.SqlServerDatabaseProvider.GetSqlType ( DatabasePropertyMap property)
inlineprotected

CLR 속성 형식을 대응하는 SQL Server 열 형식으로 변환합니다.

매개변수
property변환할 속성 매핑입니다.
반환값
SQL Server 열 형식 선언입니다.

SqlServerDatabaseProvider.cs 파일의 396 번째 라인에서 정의되었습니다.

397 {
398 var type = property.PropertyType;
399
400 if (type == typeof(bool))
401 {
402 return "BIT";
403 }
404
405 if (type == typeof(byte) || type == typeof(short))
406 {
407 return "SMALLINT";
408 }
409
410 if (type == typeof(int))
411 {
412 return "INT";
413 }
414
415 if (type == typeof(long))
416 {
417 return "BIGINT";
418 }
419
420 if (type == typeof(float))
421 {
422 return "REAL";
423 }
424
425 if (type == typeof(double))
426 {
427 return "FLOAT";
428 }
429
430 if (type == typeof(decimal))
431 {
432 return "DECIMAL(18, 4)";
433 }
434
435 if (type == typeof(DateTime) || type == typeof(DateTimeOffset))
436 {
437 return "DATETIME2";
438 }
439
440 if (type == typeof(byte[]))
441 {
442 return "VARBINARY(MAX)";
443 }
444
445 return "NVARCHAR(MAX)";
446 }

◆ IsTableExists()

override bool Dreamine.Database.SqlServer.SqlServerDatabaseProvider.IsTableExists ( string tableName)
inline

현재 SQL Server 데이터베이스에 지정한 테이블이 존재하는지 확인합니다.

매개변수
tableName확인할 테이블 이름입니다.
반환값
테이블 존재 여부입니다.
예외
ArgumentNullExceptiontableNamenull인 경우 발생합니다.
ArgumentExceptiontableName 이 비어 있거나 공백인 경우 발생합니다.

SqlServerDatabaseProvider.cs 파일의 184 번째 라인에서 정의되었습니다.

185 {
186 ArgumentException.ThrowIfNullOrWhiteSpace(tableName);
187
188 const string sql = """
189 SELECT COUNT(1)
190 FROM INFORMATION_SCHEMA.TABLES
191 WHERE TABLE_NAME = @TableName
192 """;
193
194 return ExecuteScalar<int>(sql, new { TableName = tableName }) > 0;
195 }

◆ IsTableExistsAsync()

override async Task< bool > Dreamine.Database.SqlServer.SqlServerDatabaseProvider.IsTableExistsAsync ( string tableName,
CancellationToken cancellationToken = default )
inline

현재 SQL Server 데이터베이스에 지정한 테이블이 존재하는지 비동기적으로 확인합니다.

매개변수
tableName확인할 테이블 이름입니다.
cancellationToken조회 취소 토큰입니다.
반환값
테이블 존재 여부를 결과로 제공하는 작업입니다.
예외
ArgumentNullExceptiontableNamenull인 경우 발생합니다.
ArgumentExceptiontableName 이 비어 있거나 공백인 경우 발생합니다.

SqlServerDatabaseProvider.cs 파일의 245 번째 라인에서 정의되었습니다.

248 {
249 ArgumentException.ThrowIfNullOrWhiteSpace(tableName);
250
251 const string sql = """
252 SELECT COUNT(1)
253 FROM INFORMATION_SCHEMA.TABLES
254 WHERE TABLE_NAME = @TableName
255 """;
256
257 var count = await ExecuteScalarAsync<int>(sql, new { TableName = tableName }, cancellationToken)
258 .ConfigureAwait(false);
259 return count > 0;
260 }

◆ QuoteIdentifier()

override string Dreamine.Database.SqlServer.SqlServerDatabaseProvider.QuoteIdentifier ( string identifier)
inlineprotected

SQL Server 대괄호 문법으로 식별자를 안전하게 인용합니다.

매개변수
identifier인용할 식별자입니다.
반환값
이스케이프하고 인용한 식별자입니다.
예외
ArgumentNullExceptionidentifiernull인 경우 발생합니다.
ArgumentExceptionidentifier 가 비어 있거나 공백인 경우 발생합니다.

SqlServerDatabaseProvider.cs 파일의 323 번째 라인에서 정의되었습니다.

324 {
325 ArgumentException.ThrowIfNullOrWhiteSpace(identifier);
326 return "[" + identifier.Replace("]", "]]", StringComparison.Ordinal) + "]";
327 }

속성 문서화

◆ Kind

override DatabaseProviderKind Dreamine.Database.SqlServer.SqlServerDatabaseProvider.Kind
get

SQL Server 공급자 종류를 가져옵니다.

SqlServerDatabaseProvider.cs 파일의 64 번째 라인에서 정의되었습니다.


이 클래스에 대한 문서화 페이지는 다음의 파일로부터 생성되었습니다.: