외래 키 에 외래 키가있는 사용 권한을 저장하는 Sql Server에 다음 표가 있음 BlogId
. 내가 뭘하고 싶은 BlogId
후 각 열을 취하고 KeyValuePair<TKey, TValue>
로서 돌려 단정있는 쿼리를 작성합니다.하나의 데이터 행에있는 열의 KeyValuePair <TKey, TValue> 만들기
CREATE TABLE [dbo].[UserPermission] (
[UserPermissionId] INT IDENTITY (1, 1) NOT NULL,
[BlogId] INT NOT NULL,
[UserId] INT NOT NULL,
[CanCreateNewPosts] BIT NOT NULL,
[CanEditExistingPosts] BIT NOT NULL,
[CanDeleteExistingPosts] BIT NOT NULL,
[CanPublishDraftPosts] BIT NOT NULL,
CONSTRAINT [PK_UserPermission] PRIMARY KEY CLUSTERED ([UserPermissionId] ASC),
CONSTRAINT [FK_UserPermission_Blog] FOREIGN KEY ([BlogId]) REFERENCES [dbo].[Blog] ([BlogId]),
CONSTRAINT [FK_UserPermission_User] FOREIGN KEY ([UserId]) REFERENCES [dbo].[User] ([UserId])
);
I 이렇게 단정 통해 조회하고자
: 위 예에서
using (var connection = new SqlConnection(this.connectionString))
{
string sql = "SELECT * FROM [Permission] WHERE UserId = @UserId";
await connection.OpenAsync();
IEnumerable<KeyValuePair<string, bool>> results = await connection.QueryAsync(
sql,
new { UserId = this.userId });
}
var p1 = results.First();
var p2 = results.Skip(1).First();
, I는 CanCreateNewPosts
되는 키와 값 열 가치와 KeyValuePair
발생하는 p1
싶습니다 true 또는 false입니다. 그것은 해당 값이야와 같은, 키가 CanEditExistingPosts
것 p2
으로 적용됩니다.
이에 대한 기본적인 요구 아이덴티티 클레임, 열당 하나의 제 목록 레코드로 변환 단순화하는 것이다.
splitOn:
에서 보았을 때 UserId
열 뒤에 시도해보고 싶지만 그게 내가 원하는 것 같지 않습니다. 내가 분할 한 각 열에 대해 n 일반 인수가 필요합니다. 이상적으로는 미래의 내 보안/데이터/서비스 계층에서이 테이블에 열을 추가 할 것은 단지 청구로 돌려 처리 - 나를 그냥 주장을 확인하는 데 필요한 컨트롤러 작업에 집중할. 쿼리와 Dapper 리턴이 컬럼 이름/값을 KeyValuePairs
콜렉션으로 맵핑하면 나를 필요로하게됩니다.
는; 필자가 본질적으로 원했던 것은 키 이름으로 반환되는 열 이름이었고 열 값은 해당 키에 대한 내 값으로 반환되었습니다. 그래서 나는 "CanCreateNewPost"라는 키와 "1"의 값을 가진 KeyValuePair를 가질 것입니다. BlogId, UserId 및 UserPermissionId는 포함되지 않습니다. –