Mikmak Model Country
De model klasse voor de Country entiteit
Probleem
Bij het toevoegen of wijzigen van een basiseenheid zijn er enkele regels waarmee we rekening moeten houden. De validatie hiervan gebeurt in deze Model klasse in de setters.
Design
We baseren ons op het Mikmak logisch model voor Country om de model klasse te implementeren.
Oplossing
- Maak een bestand met de naam Country.cs in de Models map. Kopieer het Mikmak Model UnitBase model en pas het aan voor Country.
- Maak daarin een klasse met de naam
Country
. - Maak voor elke kolom in de tabel een getter/setter property:
- Het gegevenstype van SQL moet je in overeenstemming brengen met het C# gevenstype. Hoe je SQL gegevenstypes in overeenstemming brengt met C# gegevenstypes lees je in EF entiteiten. Maar SQL beschikt over veel meer gegevenstypes dan C#. Hoe je die extra informatie (o.a. lengte, variabel, nationale karakters) van SQL kunt overbrengen naar C# en omgekeerd, lees je in EF object relational mapping met attributen. In de Country tabel zitten geen foreign keys. We hebben dus geen referenceproperties nodig, alleen eenvoudige scalaire eigenschappen.
- Tenslotte voeg je de businessregels van het conceptueel model (o.a. verplichte kolommen, unieke waarden, displaynaam, primary key) toe. Hoe je dat doet lees je in EF Business regels toevoegen met attributen.
- Dat levert de volgende code op:
using System.ComponentModel; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; namespace Webwinkel.Models { public class Country { [Key] public int Id { get; set; } [Required(ErrorMessage = "{0} is verplicht.")] [Column(TypeName = "char")] [MaxLength(2, ErrorMessage = "{0} kan maximum 2 karakters bevatten.")] [DisplayName("Code")] public string Code { get; set; } [Column(TypeName = "float")] [DisplayName("Breedtegraad")] public float Latitude { get; set; } [Column(TypeName = "float")] [DisplayName("Lengtegraad")] public float longitude { get; set; } [Required(ErrorMessage = "{0} is verplicht.")] [Column(TypeName = "nvarchar")] [MaxLength(255, ErrorMessage = "{0} kan maximum 255 karakters bevatten.")] [DisplayName("Naam")] public string Name { get; set; } [Column(TypeName = "float")] [DisplayName("Verzendingskostfactor")] public float ShippingCostMultiplier { get; set; } } }
- Referentie naar de model klassen toevoegen:
voor elke entiteit moet je een referenctie naar de model klasse toevoegen; meer uitleg hierover vind je in EF context
de referentie naar Country:using System.Data.Entity; namespace Webwinkel.Models { public class Dal : DbContext { public Dal() : base("name=WebwinkelWindowsAuthentication") { } public virtual DbSet<UnitBase> DbSetUnitBase { get; set; } public virtual DbSet<Country> DbSetCountry { get; set; } // http://stackoverflow.com/questions/2614941/unique-keys-in-entity-framework-4 public class Initializer : IDatabaseInitializer<Dal> { public void InitializeDatabase(Dal context) { if (!context.Database.Exists() || !context.Database.CompatibleWithModel(false)) { if (context.Database.Exists()) { context.Database.Delete(); } context.Database.Create(); } } } } }
2016-11-28 13:10:24