Insertar datos en el objeto hijo usando Dapper

dapper

Pregunta

Tengo las siguientes clases

public class TenantUser
{
    public string UserId { get; set; }
    public DateTime LastActivityDate { get; set; }
    public TenantInformation TenantInfo { get; set; }
}

public class TenantInformation
{
    public string InstitutionId { get; set; }
    public string InstitutionName { get; set; }
}

Puedo recuperar información usando Dapper con éxito:

string query = "select tu.UserId, tu.InstitutionId, ti.InstitutionName 
        from tenantuser as tu " 
        + "inner join tenantinfo ti on ti.InstitutionId = tu.InstitutionId";

var res = d.Query<TenantUser, TenantInformation, TenantUser>(query, (tu, ti) =>
{ tu.TenantInfo = ti; return tu; }, "InstitutionId");

¿Cómo insertaría datos en la tabla TenantUser?

Intenté esto:

var tenantUser = new TenantUser();
tenantUser.UserId = "testuser@mail.com";
tenantUser.TenantInfo = 
      d.Query<TenantInformation>("select * from tenantinfo").First(); //This works
tenantUser.LastActivityDate = DateTime.Now;

string query = 
    "insert into tenantUser values(@userid, @institutionid, @lastactivitydate)";
d.Execute(query, tenantUser);

Dado que InstitutionId es una propiedad en el objeto hijo TenantInfo me TenantInfo el error: "Debe declarar la variable escalar \" @ institutionid \ ".

¿Cómo arreglaría esto por favor?

Respuesta aceptada

Dapper es deliberadamente simplista. En su escenario, tendría que aplanar los datos , al menos para el insert :

d.Execute(query, new {
    userid = tenantUser.UserId,
    institutionid = tenantUser.TenantInfo.InstitutionId,
    lastactivitydate = tenantUser.LastActivityDate
});


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é