Dapper로 삽입 할 때 NotSupportedException 발생

c# dapper sql-server

문제

내 자신의 데이터베이스에 fogbugz 사례를 삽입하려고하지만 NotSupportedException이 발생합니다. System.Uri 유형의 멤버 OutlineUri를 매개 변수 값으로 사용할 수 없습니다.

그것을 전달하기 전에 args를 생성함으로써 내가 null 객체 ( 질문에서)를 참조하지 않는다는 것을 보증 할 수있었습니다. 예외가 throw 될 때 fogbugzCase.OutlineUri에 유효한 값이 있음을 알 수 있습니다.

어떤 아이디어?

코드는 다음과 같습니다 (많은 들여 쓰기에 대한 사과) :

    public void Foo(IEnumerable<FogbugzCase> cases)
    {
        using (SqlConnection conn = CreateConnection())
        {
            TruncateWorkingTable(conn, "Cases");

            foreach (FogbugzCase fogbugzCase in cases)
            {
                int categoryId = fogbugzCase.Category.Id;
                int? assigneeId = null;
                if (fogbugzCase.PersonAssignedTo != null)
                    assigneeId = fogbugzCase.PersonAssignedTo.Id;
                int? resolveeId = null;
                if (fogbugzCase.PersonResolvedBy != null)
                    resolveeId = fogbugzCase.PersonResolvedBy.Id;

                var args = new
                    {
                        BugId = fogbugzCase.BugId,
                        Title = fogbugzCase.Title,
                        ProjectId = fogbugzCase.Project.Id,
                        CategoryId = categoryId,
                        RootId = fogbugzCase.Root,
                        MilestoneId = fogbugzCase.Milestone.Id,
                        Priority = fogbugzCase.Priority,
                        StatusId = fogbugzCase.Status.Id,
                        EstimatedHours = fogbugzCase.EstimatedHours,
                        ElapsedHours = fogbugzCase.ElapsedHours,
                        PersonAssignedToId = assigneeId,
                        PersonResolvedById = resolveeId,
                        IsResolved = fogbugzCase.IsResolved,
                        IsOpen = fogbugzCase.IsOpen,
                        Opened = fogbugzCase.Opened,
                        Resolved = fogbugzCase.Resolved,
                        Uri = fogbugzCase.Uri,
                        OutlineUri = fogbugzCase.OutlineUri,
                        Spec = fogbugzCase.Spec,
                        ParentId = fogbugzCase.ParentId,
                        Backlog = fogbugzCase.Backlog
                    };
                conn.Execute("INSERT INTO fogbugz.Cases(CaseId, Title, ProjectId, CategoryId, Root, MilestoneId, Priority, Status, " +
                             "EstimatedHours, ElapsedHours, AssignedTo, ResolvedBy, IsResolved, IsOpen, Opened, Resolved, Uri, ResolveUri, " +
                             "OutlineUri, SpecUri, ParentId, Backlog) " +
                             "VALUES(@BugId, @Title, @ProjectId, @CategoryId, @RootId, @MilestoneId, @Priority, @StatusId, @EstimatedHours, " +
                             "@ElapsedHours, @PersonAssignedToId, @PersonResolvedById, @IsResolved, @IsOpen, @Opened, @Resolved, @Uri, " +
                             "@ResolveUri, @OutlineUri, @Spec, @ParentId, @Backlog);", 
                             args);
            }
        }
    }

수락 된 답변

실제로, 우리는 우 리의 인내 된 처리가 없습니다. 선택한 Uri-to-string 표현을 사용하십시오 (여러 가지가 있으며 다르게 동작합니다). 예를 들면 다음과 같습니다.

...
OutlineUri = fogbugzCase.OutlineUri.OriginalString
...

이것은 아마도 우리가 자동으로 할 수있는 것입니다. 그러나 단순히 요청으로 나오지 않았습니다.



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow