Je construis un ORM en utilisant Unit ou Work and Repository en utilisant Dapper. J'ai cherché sur Internet ce problème et pas de chance.
J'ai les tableaux suivants:
Comme vous pouvez le voir, Instance a Entity à l’intérieur. J'ai 2 approches:
Approche 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;}
}
Comment puis-je obtenir de la valeur pour l'entité avec cette approche?
Approche 2 (selon ce lien ):
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;}
}
Quel design est préférable pour l'utilisation?
Vous pouvez utiliser QueryMultiple
si vous souhaitez QueryMultiple
les données de deux tables différentes et les remplir dans deux classes POCO différentes. Ce qui suit est copié à partir d' ici :
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();
}
}
Les deux modèles que vous avez mentionnés dans votre code peuvent être traités avec cette approche.
En tant qu'approche alternative, vous pouvez combiner vos deux POCO en un seul ou bien utiliser l'héritage. Mais, en regardant votre modèle de données, je ne pense pas que cela soit applicable à ce cas particulier.
Quel design est préférable pour l'utilisation?
Dépend de vous. Tout ce qui convient à votre projet nécessite de limiter les complexités inutiles.