using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity;
using System.Linq;
using System.Web;

namespace WebApplication1.Models {
	[Table( "Annonces" )]
	public class Annonce {
		public Guid Id { get; set; }
		[Required, MaxLength( 200 )]
		public string Titre { get; set; }
		[Required]
		public string Texte { get; set; }
		public Guid RedacteurId { get; set; }
		public virtual Redacteur Redacteur { get; set; }
	}

	[Table( "Redacteurs" )]
	public class Redacteur {
		public Guid Id { get; set; }
		[Required, MaxLength( 50 )]
		public string Nom { get; set; }
		public virtual ICollection<Annonce> Annonces { get; set; }
	}

	public class PetitesAnnoncesContext : DbContext {
		static PetitesAnnoncesContext() {
			Database.SetInitializer<PetitesAnnoncesContext>(
														 new PetitesAnnoncesContextInitialiseur() );
		}
		public PetitesAnnoncesContext() : base( "name=CnxPetitesAnnonces" ) { }
		public virtual DbSet<Annonce> Annonces { get; set; }
		public virtual DbSet<Redacteur> Redacteurs { get; set; }
		protected override void OnModelCreating( DbModelBuilder mb ) {
			mb.Entity<Annonce>()
				.HasRequired( a => a.Redacteur )
				.WithMany( r => r.Annonces )
				.WillCascadeOnDelete( true );
		}
	}

	public class PetitesAnnoncesContextInitialiseur :
											DropCreateDatabaseAlways<PetitesAnnoncesContext> {
		protected override void Seed( PetitesAnnoncesContext context ) {
			var r1 = new Redacteur() {
				Id = Guid.NewGuid(),
				Nom = "R1",
				Annonces = new HashSet<Annonce>() {
					new Annonce() {
						Id=Guid.NewGuid(), Texte="Texte 1", Titre="Titre 1" },
					new Annonce() {
						Id=Guid.NewGuid(), Texte="Texte 2", Titre="Titre 2" }
				}
			};
			var r2 = new Redacteur() {
				Id = Guid.NewGuid(),
				Nom = "R2",
				Annonces = new HashSet<Annonce>() {
					new Annonce() {
						Id=Guid.NewGuid(), Texte="Texte 3", Titre="Titre 3" } }
			};
			context.Redacteurs.Add( r1 );
			context.Redacteurs.Add( r2 );
			base.Seed( context );
		}
	}


}