You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
mchsamples-.net-core/ex_042_010_EF_CF_Many_to_Many/Artiste.cs

77 lines
2.4 KiB

// ========================================================================
//
// Copyright (C) 2016-2017 MARC CHEVALDONNE
// marc.chevaldonne.free.fr
//
// Module : Artiste.cs
// Author : Marc Chevaldonné
// Creation date : 2016-10-21
//
// ========================================================================
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
namespace ex_042_010_EF_CF_Many_to_Many
{
/// <summary>
/// Artiste est une classe POCO, i.e. Plain Old CLR Object.
/// Elle a une relation many-many avec la classe Artiste via la propriété Artistes.
/// La clé primaire est générée lors de l'insertion en table.
///
/// Aujourd'hui (21 octobre 2016), il n'est pas encore possible d'utiliser les annotations de données pour les relations many to many.
/// En conséquence, il faut créer une classe pour la table d'association.
/// Dans la classe Artiste, on trouve donc une propriété AlbumsArtistes, collection de AlbumArtiste (correspondant à la table d'association).
/// On trouve également une propriété calculée Albums qui réalise une projection de la collection précédente pour obtenir les albums, ainsi
/// qu'une méthode AddAlbum rajoutant une ligne dans la table d'association.
/// </summary>
[Table("Artistes")]
public class Artiste
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid UniqueId
{
get; set;
}
public string Prénom
{
get; set;
}
public string Nom
{
get; set;
}
public DateTime DateDeNaissance
{
get; set;
}
public DateTime? DateDeMort
{
get; set;
}
public virtual IEnumerable<Album> Albums
{
get
{
return AlbumsArtistes.Select(aa => aa.Album);
}
}
public void AddAlbum(Album album)
{
AlbumsArtistes.Add(new AlbumArtiste() { Album = album, Artiste = this });
}
public virtual ICollection<AlbumArtiste> AlbumsArtistes { get; set; } = new List<AlbumArtiste>();
}
}