Insérer des données dans un objet enfant à l'aide de Dapper

dapper

Question

J'ai les cours suivants

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

Je suis capable de récupérer des informations avec Dapper avec succès:

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

Comment insérer des données dans la table TenantUser?

J'ai essayé ceci:

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

InstitutionId étant une propriété de l'objet enfant TenantInfo j'obtiens l' erreur suivante: "Doit déclarer la variable scalaire \" @ institutionid \ ".

Comment pourrais-je résoudre ce problème s'il vous plaît?

Réponse acceptée

Dapper est délibérément simpliste. Dans votre scénario, vous devrez aplatir les données - au moins pour l' insert :

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


Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi