NotSupportedException al insertar con Dapper

c# dapper sql-server

Pregunta

Estoy tratando de insertar un montón de casos fogbugz en mi propia base de datos, pero obtengo una excepción NotSupportedException: el miembro OutlineUri de tipo System.Uri no se puede usar como un valor de parámetro.

Al crear args antes de pasarlo, pude asegurarme de que no estoy haciendo referencia a un objeto nulo (de esta pregunta SO). Puedo ver que fogbugzCase.OutlineUri tiene un valor válido cuando se lanza la excepción.

¿Algunas ideas?

Aquí está el código (disculpas por la cantidad de sangrías):

    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);
            }
        }
    }

Respuesta aceptada

De hecho, no hay un manejo incorporado de Uri. Simplemente use la representación Uri-to-string elegida (hay varias y se comportan de forma diferente), por ejemplo:

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

Esto es algo que quizás podríamos hacer automáticamente, pero simplemente nunca ha surgido como una solicitud.



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow