{"id":55000049,"date":"2016-08-01T00:00:00","date_gmt":"2020-03-27T19:21:33","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=49"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"LINQ_to_Entities_Daten_bearbeiten","status":"publish","type":"post","link":"https:\/\/vbentwickler.de\/LINQ_to_Entities_Daten_bearbeiten\/","title":{"rendered":"LINQ to Entities: Daten bearbeiten"},"content":{"rendered":"<p><b>In den vorangegangenen Ausgaben von DATENBANKENTWICKLER haben Sie bereits erfahren, wie Sie per ADO.NET auf die Daten der Tabellen einer Datenbank zugreifen. Nun nutzen wir nicht mehr direkt ADO.NET, sondern das Entity Framework als Datenlieferant, welches eine ganz andere Art des Zugriffs erm&ouml;glicht. Dieser Artikel zeigt, wie Sie die per Entity Data Model bereitgestellten Daten mit LINQ to Entities &auml;ndern, l&ouml;schen und neu anlegen.<\/b><\/p>\n<h2>Beispielprojekt<\/h2>\n<p>Das Beispielprojekt soll &uuml;ber ein geeignetes Entity Data Model auf die Tabellen in einer LocalDB-Datenbank zugreifen. Wie Sie das Entity Data Model erstellen, beschreiben wir im Artikel Entity Data Model f&uuml;r eine Datenbank erstellen.<\/p>\n<p>In Bild 1 sehen Sie die Klassen des Beispiels, die prinzipiell wie ein Datenmodell aussehen. Diese Klassen bilden die Grundlage der Beispiele f&uuml;r einige Artikel, aber sp&auml;ter werden wir diese gegebenenfalls noch etwas erweitern. Alle Beispielmethoden finden Sie in der Klasse Beispiele_EF_Bearbeiten.cs. Um die Beispiele auszuprobieren, starten Sie einfach das Projekt.<\/p>\n<h2>Aufruf der Beispielmethoden<\/h2>\n<p>Damit wir die nachfolgend programmierten Methoden einfach aufrufen k&ouml;nnen, verwenden wir wieder die bereits in fr&uuml;heren Artikeln verwendete Klasse Program mit einer Main-Methode, die alle &ouml;ffentlichen, statischen Methoden aus &ouml;ffentlichen Klassen auflistet und zur Ausf&uuml;hrung anbietet. In einer neuen Klasse namens Beispiele_EF_Bearbeiten legen wir dann die sp&auml;ter vorgestellten Methoden an.<\/p>\n<h2>Einen Kunden bearbeiten<\/h2>\n<p>Im Artikel <b>LINQ to Entities: Daten abfragen <\/b>haben Sie bereits erfahren, wie Sie die Daten aus einer Tabelle in ein oder mehrere Objekte laden und diese in der Konsole ausgeben k&ouml;nnen. Genau das erledigen wir jetzt auch &#8211; mit dem Unterschied, dass wir auch noch eine &Auml;nderung an diesem Kunden vornehmen und diese &Auml;nderung speichern.<\/p>\n<p>Den vollst&auml;ndigen Code des Beispiels sehen Sie in Listing 1. Die Methode <b>KundeAendern <\/b>erstellt eine Variable des Typs <b>BestellverwaltungEntities<\/b>, welche die verschiedenen Klassen wie <b>Kunde<\/b>, <b>Anrede <\/b>et cetera bereith&auml;lt, und speichert den Verweis darauf in der Variablen <b>context<\/b>, welche innerhalb des <b>using<\/b>-Konstrukts ihre G&uuml;ltigkeit beh&auml;lt. &Uuml;ber die <b>Find<\/b>-Methode des <b>Kunden<\/b>-DBSets von <b>context <\/b>ermittelt die Prozedur dann den Kunden mit dem Wert <b>1 <\/b>in der Identit&auml;tsspalte, in diesem Fall im Feld <b>ID<\/b>. Die Methode gibt nun die Inhalte der drei Felder <b>ID<\/b>, <b>Vorname <\/b>und <b>Nachname <\/b>des <b>Kunde<\/b>-Objekts in der Konsole aus. Dann &auml;ndert sie durch eine einfache Zuweisung des Wertes <b>Andreas <\/b>an die Eigenschaft <b>Vorname <\/b>den Inhalt des Objekts. Die erneute Ausgabe zeigt den ge&auml;nderten Inhalt. Nun folgt der entscheidende Schritt: Die Methode ruft die <b>SaveChanges<\/b>-Methode des <b>context<\/b>-Objekts auf. Damit sollen die &Auml;nderungen in die Datenbank &uuml;bertragen werden. Um dies zu pr&uuml;fen, erstellen wir einen neuen Kontext auf die Datenbank, lesen den Kundendatensatz erneut in das Objekt <b>kunde <\/b>ein und geben die aktuellen Werte von <b>ID<\/b>, <b>Vorname <\/b>und <b>Nachname <\/b>aus. Das Ergebnis: Die &Auml;nderung wurde in die Datenbank &uuml;bernommen.<\/p>\n<pre>public static void KundeAendern() {\r\n     using (BestellverwaltungEntities context = new BestellverwaltungEntities()) {\r\n         Kunde kunde = context.Kunden.Find(1);\r\n         Console.WriteLine(\"Kunde vorher: {0} {1} {2}\", kunde.ID, kunde.Vorname, kunde.Nachname);\r\n         kunde.Vorname = \"Andreas\";\r\n         Console.WriteLine(\"Kunde nachher: {0} {1} {2}\", kunde.ID, kunde.Vorname, kunde.Nachname);\r\n         context.SaveChanges();\r\n     }\r\n     using (BestellverwaltungEntities context = new BestellverwaltungEntities()) {\r\n         Kunde kunde = context.Kunden.Find(1);\r\n         Console.WriteLine(\"Kunde neu eingelesen: {0} {1} {2}\", kunde.ID, kunde.Vorname, kunde.Nachname);\r\n     }\r\n     Console.ReadLine();\r\n}<\/pre>\n<div class=\"rcp_restricted\"><p><span style=\"color: #ff0000;\">M&ouml;chten Sie weiterlesen? Dann l&ouml;sen Sie Ihr Ticket!<\/span><br \/>\n<span style=\"color: #ff0000;\">Hier geht es zur Bestellung des Jahresabonnements des Magazins <strong>Visual Basic Entwickler<\/strong>:<\/span><br \/>\n<span style=\"color: #ff0000;\"><a style=\"color: #ff0000;\" href=\"https:\/\/shop.minhorst.com\/magazine\/363\/visual-basic-entwickler-jahresabonnement?c=77\">Zur Bestellung ...<\/a><\/span><br \/>\n<span style=\"color: #ff0000;\">Danach greifen Sie sofort auf <strong>alle rund 200 Artikel<\/strong> unseres Angebots zu - auch auf diesen hier!<\/span><br \/>\n<span style=\"color: #000000;\">Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:<\/span><\/p>\n<\/div>\n\n\t\n\t<form id=\"rcp_login_form\"  class=\"rcp_form\" method=\"POST\" action=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000049\/\">\n\n\t\t\n\t\t<fieldset class=\"rcp_login_data\">\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_login\">Username or Email<\/label>\n\t\t\t\t<input name=\"rcp_user_login\" id=\"rcp_user_login\" class=\"required\" type=\"text\"\/>\n\t\t\t<\/p>\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_pass\">Password<\/label>\n\t\t\t\t<input name=\"rcp_user_pass\" id=\"rcp_user_pass\" class=\"required\" type=\"password\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t\t<p>\n\t\t\t\t<input type=\"checkbox\" name=\"rcp_user_remember\" id=\"rcp_user_remember\" value=\"1\"\/>\n\t\t\t\t<label for=\"rcp_user_remember\">Remember me<\/label>\n\t\t\t<\/p>\n\t\t\t<p class=\"rcp_lost_password\"><a href=\"\/data\/wp\/v2\/posts\/55000049?rcp_action=lostpassword\"><\/a><\/p>\n\t\t\t<p>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_action\" value=\"login\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_redirect\" value=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000049\/\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"9cc095fa2e\"\/>\n\t\t\t\t<input id=\"rcp_login_submit\" class=\"rcp-button\" type=\"submit\" value=\"Login\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t<\/fieldset>\n\n\t\t\n\t<\/form>\n<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In den vorangegangenen Ausgaben von DATENBANKENTWICKLER haben Sie bereits erfahren, wie Sie per ADO.NET auf die Daten der Tabellen einer Datenbank zugreifen. Nun nutzen wir nicht mehr direkt ADO.NET, sondern das Entity Framework als Datenlieferant, welches eine ganz andere Art des Zugriffs erm&ouml;glicht. Dieser Artikel zeigt, wie Sie die per Entity Data Model bereitgestellten Daten mit LINQ to Entities &auml;ndern, l&ouml;schen und neu anlegen.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[662016,66042016,44000008,44000021,44000023],"tags":[],"yst_prominent_words":[],"class_list":["post-55000049","post","type-post","status-publish","format-standard","hentry","category-662016","category-66042016","category-Datenzugriffstechnik","category-Entity_Framework","category-PowerApps"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000049","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/comments?post=55000049"}],"version-history":[{"count":0,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000049\/revisions"}],"wp:attachment":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/media?parent=55000049"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/categories?post=55000049"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/tags?post=55000049"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/yst_prominent_words?post=55000049"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}