ASP.NET MVC 3 – EF CODE FIRST – Relation 1-n / n-1

Posted on

Voici une démonstration d’application MVC 3 en mode EF CODE FIRST, pour travailler avec une base de données dont les relations sont de type 1-n/n-1

Dans un premier temps un exemple du schéma :

Maintenant voici les classes crées en mode Code first :

La classe Genre :

public class Genre

    {

        //PK = GenreId

        public int GenreId { get; set; }

        /// <summary>

        /// Metadata : Required = Si champ vide

        ///             StringLenght = max caractères

        /// </summary>

        [Required(ErrorMessage = “Un nom de catégorie est demandé”)]

        [StringLength(160)]

        public string Name { get; set; }

        //Variable de publication 

        public bool PublieG { get; set; }

        //Collection de règles sous formes de Listes

        public virtual List<Niveau> Niveaux { get; set; }

 

    }

Classe Niveau :

public class Niveau

    {

        //PK

        public int NiveauId { get; set; }

        //FK Genre

        public int GenreId { get; set; }

        [Required(ErrorMessage = “Un nom de niveau est requis”)]

        [StringLength(160)]

        public string NameNiveau { get; set; }

        //Variable de publication

        public bool PublieN { get; set; }

        public virtual Genre Genre { get; set; }

        public virtual List<Regle> Regles { get; set; }

    }

Classe Règle :

public class Regle

    {

        //PK = RegleID

        public int RegleId { get; set; }

       

        //FK = GenreId

        /// <summary>

        /// Metadata : DisplayName

        /// </summary>

        public int NiveauId { get; set; }

        /// <summary>

        /// Metadata : Required

        ///             Datatype : Texte multiligne

        /// </summary>

        [Required(ErrorMessage = “Une description est nécessaire”)]       

        [DataType(DataType.Text)]

        public string DescriptionRegle { get; set; }

        //Titre

        [Required(ErrorMessage = “Un titre est nécessaire”)]

        public string Title { get; set; }       

        [DataType(DataType.Text)]

        public string Csharp { get; set; }

        [DataType(DataType.Text)]

        public string Fsharp { get; set; }

        [DataType(DataType.Text)]

        public string Cpp { get; set; }

        [DataType(DataType.Text)]

        public string Vbnet { get; set; }

        public DateTime DateCreation { get; set; }

        //Variable de publication

        public bool Publie { get; set; }

        //Lien de relation avec genre de type 1

         public virtual Niveau Niveau { get; set; }

    }

Il nous reste plus qu’a implémenter une classe de création de données (SampleData):

public class SampleDataDropCreateDatabaseAlways<MyEntities>

    {

       

        protected override void Seed(MyEntities context)

        {

            var genres = new List<Genre>

            {

                new Genre { Name = “G1”,PublieG=true },

                new Genre { Name = “G2”,PublieG=false },         

            };

            var nive = new List<Niveau>

            {

                new Niveau { NameNiveau=”Niveau 1″,PublieN=true,Genre=genres.Single(g => g.Name == “G1”) },

                new Niveau { NameNiveau=”Niveau 2″,PublieN=true,Genre=genres.Single(g => g.Name == “G2”) }

            };


#region Regles Ajout

            new List<Regle>

            {

                new Regle { Title = “Montitre”,                    DescriptionRegle =”une description “,

                    Csharp =” “,      Fsharp =””,     Cpp=””,    Vbnet=””,      DateCreation=DateTime.Now.Date,      Publie=true,      Niveau = nive.Single(g => g.NameNiveau == “Niveau 1”),

                    },

 

                  new Regle { Title = “Montitre2”,

                    DescriptionRegle =”Une autre description ”

                    Csharp =” “, Fsharp =””, Cpp=””, Vbnet=””,

                   DateCreation=DateTime.Now.Date, Publie=true,

                     Niveau = nive.Single(g => g.NameNiveau == “Niveau 2”),

                    },
   

            }.ForEach(a => context.Regles.Add(a));

#endregion

        }

    }

Pour initialisation du code de la classe SampleData il faut se rendre dans Global.asax

Et mettre  le code suivant dans la méthode Application_Start()

  Database.SetInitializer(new MvcApplicationSample.Models.SampleData());

Cela aura pour but de vous créer une bases de données généralement vers SQL EXPRESS ou SQLCE tout depend des informations dans le web.config



Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s