public enum PlaneType
{
BOING=1,AIRBUS=2
}
---------
public class Flight
{ prop ...
public string Nom { get; set; }
}
[Required]
[Required(ErrorMessage ="Champs obligatoire")]
[NotMapped]
[Table("MyFlight")]
[Column("Name")]
[Column("DoB", TypeName="DateTime2")]
[Key]
[Column(Order=1)]
[ForeignKey(“StandardId”)]
[MinLength(7, ErrorMessage = "MinLength 7")]
[MaxLength(7, ErrorMessage = "MaxLength 7")]
[StringLength(7, MinimumLength = 7, ErrorMessage = "il faut etre 7 characters .. ... ...")]
[StringLength(25, MinimumLength = 3, ErrorMessage = "First entre 3 characters et 25 characters .")]
[Range(0,int.MaxValue,ErrorMessage ="entier positive")]
[Range(1,120, ErrorMessage="Age must be between 1-120 in years.")]
[Range(0,24)]
[Range(0, int.MaxValue)]
[Range(0, int.MinValue)]
[DataType(DataType.Date)]
[DataType(DataType.MultilineText)]
[DataType(DataType.Currency)]
[DataType(DataType.Currency)]
[DataType(DataType.DateTime)]
[DataType(DataType.EmailAddress,ErrorMessage ="aaa")]
[DataType(DataType.ImageUrl)]
[DataType(DataType.Password)]
[DataType(DataType.PhoneNumber)]
[DataType(DataType.PostalCode)]
[DataType(DataType.Text)]
[DataType(DataType.Time)]
[Compare("Email", ErrorMessage= "Email Not Matched")]
[MaxLength(50)]
[StringLength(50)]
[Phone(ErrorMessage ="phone number")]
[EmailAddress(ErrorMessage = "une address email invalid .")]
[Display(Name = “Student Email“)]
public string Email { get; set;}
[Display(Name = "Date of Birth")]
public class Staff :Passenger
public virtual ICollection<Postulant> Postulants { get; set; }
public virtual Entreprise Entreprise { get; set; }
[ForeignKey("PlaneId")]
ou bien
public virtual Plane? MyPlane { get; set; }
[ForeignKey("MyPlane")]
public int? PlaneId { get; set; } //prop
//tp5 Q6
//public IList<Passenger> passengers { get; set; }
public virtual IList<Reservation> Reservations { get; set; }
builder.ToTable("MyFlight");
builder.Property(p => p.Capacity).HasColumnName("PlaneCapacity");
builder.HasKey(p => p.PlaneId);
builder
.HasOne(f => f.MyPlane) // ta3 class 1 thot feha one or many w attribue 1
.WithMany(p => p.Flights) // ta3 class 2 thot feha one or many w attribue 2
.HasForeignKey(f => f.PlaneId)
.OnDelete(DeleteBehavior.SetNull);
OR
un simple [ForeignKey(“PlaneId”)] fou9 declamation du var plane
//builder
// .HasMany(f => f.passengers)
// .WithMany(p => p.Flights)
// .UsingEntity(ass => ass.ToTable("FP"));
tasna3ha wahdha l classe ili fil west mba3ed tzidha
----------------
public virtual Passenger MyPassenger { get; set; }
public string PassengerId { get; set; }
public virtual Flight MyFlight { get; set; }
public int FlightId { get; set; }
-----------------
builder.HasOne(r => r.MyPassenger)
.WithMany(p => p.Reservations)
.HasForeignKey(r=>r.PassengerId)
.OnDelete(DeleteBehavior.Cascade);
builder.HasOne(r=>r.MyFlight)
.WithMany(f=>f.Reservations)
.HasForeignKey(r=>r.FlightId)
.OnDelete(DeleteBehavior.Cascade);
builder.HasKey(r => new { r.FlightId, r.PassengerId });
$$$ => tansech t3aytelha fil OnModelCreating
Configurer l’héritage schématisé dans le diagramme de classe de façon à ce que les entités seront mappées à IsTraveller : => fil FlightConfig
modelBuilder.Entiy<Membre>()
.HasDiscriminator<string>("Type")
.HasValue<Entraineur>("e")
.HasValue<Joueur>("j")
.HasValue<Membre>("m");
builder.HasDiscriminator<int>("isTraveler")
.HasValue<Passenger>(0)
.HasValue<Traveller>(1)
.HasValue<Staff>(2);
Configurer l'héritage schéématisé dans le diagramme de classe de façonn à ce que les entités seront mappées sur 3 tabllee : => fil AMContext
modelBuilder.Entity<Biological>().ToTable("Biologicals");
modelBuilder.Entity<Chemical>().ToTable("Chemicals");
modelBuilder.Entity<Staff>().ToTable("Staffs");
modelBuilder.Entity<Traveller>().ToTable("Travellers");
tzidha fil OnConfiguring fil AMContext7
optionsBuilder.UseLazyLoadingProxies();
ay propriétés de navigation tzidha 9dem public virtual (ay haja de type classe o5ra)
public class AMContext : DbContext //herite de DbContext
{
public DbSet<Flight> Flights { get; set; } // pour chaque classe
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(@"Data Source=(localdb)\mssqllocaldb;
Initial Catalog = Airport;
Integrated Security = true");
//Tp5 Q13
optionsBuilder.UseLazyLoadingProxies(); // LazyLoading
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.ApplyConfiguration(new ReservationConfig());
}
protected override void ConfigureConventions(ModelConfigurationBuilder configurationBuilder)
{
configurationBuilder.Properties<DateTime>()
.HaveColumnType("date");
}
}
public Plane(PlaneType pt, int capacity, DateTime date)
{
Capacity = capacity;// on peut utiliser this.Capacity = capacity; ou sans this (pour distinguer les noms)
ManufactureDate = date;
MyPlaneType = pt;
}
public override string ToString()
{
return "Capacity:" + Capacity + ";"
+ "ManufactureDate:" + ManufactureDate + ";"
+ "PlaneId:" + PlaneId + ";"
+ "PlaneType:" + MyPlaneType;
}
Services pour cree les fonction de modifercation Crud on Va Cree IFlightService comme interface des fonction dans FlightService et herite IFlightService et dans FlightService on cree les fonction
public class FlightService :Service<Flight>, IFlightService
{}
public IList<Flight> Flights { get; set; } //prop
public IList<DateTime> GetFlightDates(string destination) // linqIntegre
{
//return (from f in Flights
// where f.Destination == destination
// select f.FlightDate).ToList();
return Flights.Where(f => f.Destination == destination) //Methoded'extention
.Select(f => f.FlightDate).ToList();
}
var PersoQuery =
from perso in personnes
where ( perso.Budget > 500)
orderby perso.Nom ascending
select new { Name = perso.Nom, Number = perso.Num};
Renvoie le premier élément d'une collection ou le premier élément qui satisfait une condition.
Renvoie le premier élément d'une collection ou le premier élément qui satisfait une condition. Renvoie une valeur par défaut si l'index est hors plage.
Renvoie le seul élément d'une collection ou le seul élément qui satisfait à une condition.
Identique à Single, sauf qu'il renvoie une valeur par défaut d'un type générique spécifié, au lieu de lever une exception
Renvoie le dernier élément d'une collection ou le dernier élément qui satisfait à une condition.
Renvoie le dernier élément d'une collection ou le dernier élément qui satisfait à une condition. Renvoie une valeur par défaut si aucun élément de ce type n'existe.
Pour indiquer le nombre d’ élément a ignorer de la sélection.
Pour indiquer le nombre d’ élément a garder de la sélection.
calcule la moyenne des éléments numériques de la collection.
calcule la somme des éléments numériques de la collection.
renvoie le plus grand élément numérique d'une collection.
renvoie le nombre d'éléments de la collection ou le nombre d'éléments qui ont satisfait à la condition donnée.
public void ShowFlightDetails(Plane plane)
{
var result = from f in Flights
where f.MyPlane.PlaneId == plane.PlaneId
select new { f.Destination, f.FlightDate }; //type anonyme
foreach (var item in result)
{
Console.WriteLine("destination : " + item.Destination +
"date :" + item.FlightDate);
}
}
internal class ReservationConfig : IEntityTypeConfiguration<Reservation>
{
public void Configure(EntityTypeBuilder<Reservation> builder)
{
builder.HasOne(r => r.MyPassenger)
.WithMany(p => p.Reservations)
.HasForeignKey(r=>r.PassengerId)
.OnDelete(DeleteBehavior.Cascade);
builder.HasOne(r=>r.MyFlight)
.WithMany(f=>f.Reservations)
.HasForeignKey(r=>r.FlightId)
.OnDelete(DeleteBehavior.Cascade);
builder.HasKey(r => new { r.FlightId, r.PassengerId });
}
}
Add-Migration
Update-Database
Public class PlaneConfig : IEntityTypeConfiguration<Plane>
{
public void Configure(EntityTypeBuilder<Plane> builder)
{
builder.ToTable("MyPlanes"); //modifcation du nom
builder.Property(p => p.Capacity).HasColumnName("PlaneCapacity");
builder.HasKey(p=>p.PlaneId); // fixsage du cle primere
}
}
//builder
// .HasMany(f => f.passengers)
// .WithMany(p => p.Flights)
// .UsingEntity(ass => ass.ToTable("FP"));
builder
.HasOne(f => f.MyPlane)
.WithMany(p => p.Flights)
.HasForeignKey(f => f.PlaneId)
.OnDelete(DeleteBehavior.SetNull);