Diseño de modelo con clave externa

dapper repository-pattern unit-of-work

Pregunta

Estoy construyendo un ORM usando Unit o Work and Repository usando Dapper. He buscado en Internet este problema y no tuve suerte.

Tengo las siguientes tablas:

Mis tablas

Como puede ver, Instance tiene Entity adentro. Tengo 2 enfoques:

Enfoque 1:

public class Entity
{
     public int Id {get;set;}
     public string Name {get;set;}
}

public class Instance
{
     public int Id {get;set;} 
     public Entity Entity {get;set;}
     public string Name {get;set;}
}

¿Cómo puedo obtener valor para Entity con este enfoque?

Enfoque 2 (según este enlace ):

public class Entity
{
     public int Id {get;set;}
     public string Name {get;set;}
}

public class Instance
{
     public int Id {get;set;} 
     public int EntityId {get;set;}
     public string Name {get;set;}
}

¿Qué diseño es mejor para usar?

Respuesta aceptada

Puede usar QueryMultiple si quiere buscar los datos de dos tablas diferentes y llenarlas en dos clases de POCO diferentes. A continuación se copia desde aquí :

string sql = "SELECT * FROM Invoice WHERE InvoiceID = @InvoiceID; SELECT * FROM InvoiceItem WHERE InvoiceID = @InvoiceID;";

using (var connection = My.ConnectionFactory())
{
    connection.Open();

    using (var multi = connection.QueryMultiple(sql, new {InvoiceID = 1}))
    {
        var invoice = multi.Read<Invoice>().First();
        var invoiceItems = multi.Read<InvoiceItem>().ToList();
    }
}

Ambos modelos que mencionas en tu código se pueden manejar con este enfoque.

Como enfoque alternativo, puede combinar sus dos POCO en uno o también puede usar la herencia. Pero, mirando su modelo de datos, no creo que esto sea aplicable a este caso particular.

¿Qué diseño es mejor para usar?

Depende de usted. Lo que sea que se adapte a las necesidades de su proyecto para mantener las complejidades innecesarias es bueno para usted.



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é