EF Entiteiten inserten
Home

EF Entiteiten inserten

EF Entiteiten inserten

Omdat EF werkt met POCO's (Plain Old CLR Objects), komt het creëren van een nieuwe entiteit neer op het instantiëren van een object met de new operator. Als we het object in de database willen krijgen, moeten we het toevoegen aan een bestaande context.

Nieuwe entiteiten moeten worden toegevoegd aan de DbSet<T> eigenschap van hetzelfde type, die ook de toegangspoort voor de queries is.

Als voorbeeld tonen we de code die je in een actie-methode van een ASP.NET MVC controller.

[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);
}

JI
2016-11-23 13:14:22