Procedimientos aptos y almacenados

c# dapper

Pregunta

Tengo 2 problemas, espero que ambos puedan ser respondidos en esta pregunta. Tengo un modelo como este:

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Email { get; set; }
}

Ahora suponga que mi procedimiento almacenado (que no se puede cambiar) devuelve first_name, lastName y UserEmail . Me gustaría utilizar algún método (con suerte anotaciones de datos) para asignar los campos a las propiedades. Algo como esto:

public class Person
{
    [Column(Name = "first_name")]
    public string FirstName { get; set; }
    [Column(Name = "lastName")]
    public string LastName { get; set; }
    [Column(Name = "UserEmail")]
    public string Email { get; set; }
}

es posible? Puede sugerir que las propiedades coincidan con los nombres de campo porque no distinguen entre mayúsculas y minúsculas, por lo que cambiar el correo electrónico a UserEmail funcionaría, pero no es por este motivo. Tengo una clase que tiene 2 personas asignadas a ella:

public class Example
{
    public string Name { get; set; }
    public Person Mother { get; set; }
    public Person Father { get; set; }
}

Además, no puedo usar:

Dapper.DefaultTypeMap.MatchNamesWithUnderscores = true; 

porque parece ignorar todas las otras propiedades entonces. Cualquier ayuda sería muy apreciada como de costumbre :)

Respuesta popular

Puedes hacerlo con Chain.

static Tortuga.Chain.SqlServerDataSource DS = new Tortuga.Chain.SqlServerDataSource (connectionString);

var people = DS.Procedure("procName", new { @Param1 =  x, @Parm2 = y}).ToCollection<Person>().Execute();

Honra los atributos de Column por defecto.


Tu segundo ejemplo es más difícil. Necesita prefijos para que sepa qué nombre corresponde a cada propiedad.

public class Example
{
    public string Name { get; set; }
    [Decompose("Mother_")]
    public Person Mother { get; set; }
    [Decompose("Father_")]
    public Person Father { get; set; }
}

SELECT x.nName, m.FirstName as Mother_FirstName, f.FirstName as Father_FirstName, [...] 
FROM people x
LEFT JOIN people f ON x.FatherKey = f.Key
LEFT JOIN people m ON x.MotherKey = m.Key


Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué