EF Entiteiten inserten
Nieuwe entiteiten moeten worden toegevoegd aan de DbSet<T>
Als voorbeeld tonen we de code die je in een actie-methode van een ASP.NET MVC controller.
In het eerste voorbeeld heeft de Insert methode evenveel parameters als dat er waarden in de POST werden meegegeven. Voor elk input veld op het formulier waarvaan het name attribuut is ingesteld maken we een parameter. In de methode maken we een instantie van de klasse en kopiëren de waarden van de parameters in de eigenschappen van het object.
[HttpPost] public ActionResult InsertWithNameParameters(string postalCode, string location) { Models.PostalCodes postalCodes = new Models.PostalCodes(); postalCodes.PostalCode = postalCode; postalCodes.Location = location; ViewBag.Message = "Insert een postcode in de database"; db.PostalCodes.Add(postalCodes); db.SaveChanges(); return View("Selecting", db.PostalCodes); }
Met db.SaveChanges()
worden alle wijzigingen, die in behandeling zijn, naar de database gestuurd. Entity Framework maakt gebruik van een eerste niveau (of lokale) cache. Dat is waar de "vuile" entiteiten - alle entiteiten die werden in de context werden geüpdated of gedeleted of geïnserted - zitten te wachten om te worden opgeslagen in de database. De SaveChanges
methode retourneert het aantal records die met succes werden ingebracht, en zal een uitzondering genereren als er een fout is opgetreden tijdens het proces. In dat geval worden alle wijzigingen teruggedraaid. Je moet echt met dit scenario rekening houden.
Als je experimenteert met een aantal verschillende waarden in de form velden intypt, ga je merken dat ASP.NET MVC model binding zeer vergevingsgezind is. De gebruikers kunnen zowal alles intypen of helemaal niets en toch zal ASP.NET MVC model bindig weinig niet protesteren. Als je meer strikte controle wil verkijgen over wat voor soort data je binnen krijgt moet je gegevensvalidatie toepassen op uw model (ASP.NET MVC Gegevens valideren en EF Business regels toevoegen met attributen).
Je kan ook de waarden van de name attributen van de HTML input-elementen als parameters meegeven. Je moet dan wel zelf een instantie van de klasse PostalCodes aanmaken en de eigenschappen ervan initialiseren:
[HttpPost] public ActionResult Insert(string postalCode, string location) { Models.PostalCodes postalCodes = new Models.PostalCodes(); postalCodes.PostalCode = postalCode; postalCodes.Location = location; ViewBag.Message = "Insert een postcode in de database"; db.PostalCodes.Add(postalCodes); db.SaveChanges(); return View("Selecting", db.PostalCodes); }
Een variant hierop:
[HttpPost] public ActionResult Insert([Bind(Include = "PostalCode,Location")] Models.PostalCodes postalCodes) { ViewBag.Message = "Insert een postcode in de database"; db.PostalCodes.Add(postalCodes); db.SaveChanges(); return View("Selecting", db.PostalCodes); }