Ich baue ein ORM mit Hilfe von Unit oder Work und Repository mit Dapper. Ich habe im Internet nach diesem Problem gesucht und kein Glück.
Ich habe folgende Tabellen:
Wie Sie sehen können, hat Instanz Entität im Inneren. Ich habe zwei Ansätze:
Ansatz 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;}
}
Wie kann ich mit diesem Ansatz Wert für Entity erhalten?
Ansatz 2 (laut diesem Link ):
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;}
}
Welches Design ist besser für den Einsatz?
Sie können QueryMultiple
wenn Sie die Daten aus zwei verschiedenen Tabellen QueryMultiple
und in zwei verschiedenen POCO-Klassen füllen möchten. Folgendes wird von hier kopiert:
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();
}
}
Beide Modelle, die Sie in Ihrem Code erwähnt haben, können mit diesem Ansatz behandelt werden.
Als alternativen Ansatz können Sie Ihre beiden POCOs in einem kombinieren, oder Sie können auch die Vererbung verwenden. Aber wenn Sie Ihr Datenmodell betrachten, glaube ich nicht, dass dies auf diesen speziellen Fall zutrifft.
Welches Design ist besser für den Einsatz?
Wie du willst. Was auch immer für Ihr Projekt geeignet ist, um unnötige Komplexitäten zu vermeiden, ist gut für Sie.