Je souhaite savoir comment mapper plusieurs objets de modèle à un seul DTO.Entity Framework Projeter plusieurs modèles vers un seul DTO
j'ai les modèles EF suivants comme suit:
Bracket.cs
namespace MyApp.Models
{
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity.Spatial;
[Table("Bracket")]
public partial class Bracket
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public Bracket()
{
Teams = new HashSet<Team>();
}
public int BracketId { get; set; }
[Required]
[StringLength(50)]
public string BracketName { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<Team> Teams { get; set; }
}
}
Team.cs
namespace MyApp.Models
{
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity.Spatial;
[Table("Team")]
public partial class Team
{
public int TeamId { get; set; }
[Required]
[StringLength(50)]
public string TeamName { get; set; }
public int BracketId { get; set; }
public virtual Bracket Bracket { get; set; }
}
}
et moi avons créé des objets DTO pour les représenter.
namespace MyApp.Models
{
public class BracketDto
{
public int BracketId { get; set; }
public string BracketName { get; set; }
public List<TeamDto> Teams { get; set; }
}
public class TeamDto
{
public int TeamId { get; set; }
public string TeamName { get; set; }
public int BracketId { get; set; }
}
}
Dans l'une de ma classe que j'utilise pour interroger la base de données et projeter les données obtenues, c'est ce que je fais:
public List<BracketDto> GetBrackets()
{
var brackets = (from a in this.Context.Brackets
join b in this.Context.Teams on a.BracketId equals b.BracketId
select new BracketDto()
{
BracketId = a.BracketId,
BracketName = a.BracketName
}).ToList<BracketDto>();
var teams = (from a in this.Context.Teams
select new TeamDto()
{
TeamId = a.TeamId,
TeamName = a.TeamName,
BracketId = a.BracketId
}).ToList<TeamDto>();
foreach(BracketDto bracket in brackets)
{
var tl = teams.Where(a => a.BracketId == bracket.BracketId).ToList();
bracket.Teams = tl;
}
var xtra = (from a in this.Context.Brackets
join b in this.Context.Teams on a.BracketId equals b.BracketId
select new BracketDto()
{
BracketId = a.BracketId,
BracketName = a.BracketName
}).ToList<BracketDto>();
return brackets;
}
Où j'obtenir des résultats:
[
{
"BracketId": 1,
"BracketName": "Eastern Conference",
"Teams": [
{
"TeamId": 1,
"TeamName": "Indiana Pacers",
"BracketId": 1
},
{
"TeamId": 3,
"TeamName": "Cleveland Cavaliers",
"BracketId": 1
}
]
},
{
"BracketId": 2,
"BracketName": "Western Conference",
"Teams": [
{
"TeamId": 2,
"TeamName": "Los Angeles Lakers",
"BracketId": 2
},
{
"TeamId": 4,
"TeamName": "Los Angeles Clippers",
"BracketId": 2
}
]
}
]
Je sais qu'il pourrait y avoir un moyen plus efficace de le faire. Mais je ne suis pas sûr de savoir comment le faire sur la requête LINQ que j'ai.
À la recherche de conseils et de suggestions. Je vous remercie!