J'essaie de renvoyer des données à l'aide de Dapper via une procédure stockée.
Ma classe DTO est similaire à la suivante (certaines propriétés ont été supprimées pour des raisons de concision)
public class CarDTO
{
public int CarID { get; set; }
public string Manufacturer { get; set; }
public List<CarOptionDTO> CarOptions { get; set; }
}
Dans la base de données, j'ai une table CarOption avec une colonne CarID - c'est-à-dire qu'une voiture peut avoir plusieurs options.
Mon appel DAL Layer est actuellement le suivant :
private string getCarDataSp = "[dbo].[GetCarData]";
public IEnumerable<CarDTO> GetCarData(int customerId, int year)
{
return Get(db => db.Query<CarDTO>(getCarDataSp , new { CustomerID = customerId, Year = year },
commandType: CommandType.StoredProcedure));
}
L'implémentation de ma fonction Get se trouve dans ma classe BaseRepository sous la forme suivante :
public T Get<T>(Func<IDbConnection, T> query)
{
using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["myDB"].ConnectionString))
{
return query.Invoke(db);
}
}
Est-il possible d'utiliser Dapper pour renvoyer les options de la voiture à partir de ma procédure stockée ?
Ma procédure stockée à l'heure actuelle est la suivante :
ALTER PROCEDURE [dbo].[GetCarData]
@CustomerID int,
@Year int
AS
BEGIN
SET NOCOUNT ON;
SELECT * from [dbo].Car c
JOIN [dbo].Customer cust ON c.CarID = cust.CarID
WHERE cust.CustID = @CustomerID AND cust.Year = @Year
END
la requête ci-dessus peut renvoyer de nombreuses lignes et l'ID de la voiture, le fabricant et les autres propriétés ont été supprimés par souci de concision. Dapper les renverra vers le DTO comme prévu.
Cependant, il est difficile de renvoyer la liste des options de voiture dans la procédure stockée - est-ce possible avec une autre requête ou faut-il la séparer d'une manière ou d'une autre ? Si j'ai retourné CarID 1 et CarID 2, par exemple, il peut y avoir 6 lignes dans la table CarOption avec CarID 1 et 4 lignes dans la table CarOption avec CarID 2 et idéalement, j'aimerais qu'elles soient toutes retournées dans la collection CarOptions via Dapper si possible ?