{"id":55000056,"date":"2016-10-01T00:00:00","date_gmt":"2020-03-27T19:22:26","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=56"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"EDM_Einfaches_Detailfenster","status":"publish","type":"post","link":"https:\/\/vbentwickler.de\/EDM_Einfaches_Detailfenster\/","title":{"rendered":"EDM: Einfaches Detailfenster"},"content":{"rendered":"<p><b>Wie Sie ein DataGrid-Steuerelement mit den Daten aus einem Entity Data Model f&uuml;ttern, haben Sie bereits im Artikel &#8220;Einf&uuml;hrung in das Entity Framework&#8221; erfahren. Allerdings m&ouml;chten Sie gelegentlich auch in den Datens&auml;tzen einer Tabelle bl&auml;ttern, die enthaltenen Daten &auml;ndern oder neue Datens&auml;tze hinzuf&uuml;gen &#8211; ganz, wie es unter Access in einem einfachen Detailformular m&ouml;glich war. Dieser Artikel zeigt, wie Sie dies mit den eingebauten Funktionen von Visual Studio einfach bewerkstelligen k&ouml;nnen.<\/b><\/p>\n<p>Das Ziel dieses Artikels ist es also, ein neues Fenster zu erstellen, das &uuml;ber das Entity Data Model an eine Tabelle gebunden ist &#8211; in diesem Fall an die Tabelle <b>Kunden <\/b>unserer Beispieldatenbank namens <b>Bestellverwaltung <\/b>&#8211; und das die Daten jeweils eines Datensatzes in entsprechenden Steuerelementen anzeigt. Au&szlig;erdem wollen wir dem Fenster einige Schaltfl&auml;chen hinzuf&uuml;gen, mit denen der Benutzer zum ersten, vorherigen, n&auml;chsten und letzten und zu einem neuen Datensatz springen kann. Schlie&szlig;lich soll der Benutzer auch &Auml;nderungen durchf&uuml;hren und diese speichern k&ouml;nnen.<\/p>\n<p>Wir verwenden dabei ein neues Projekt des Typs <b>Visual C#|WPF-Anwendung<\/b>. Anschlie&szlig;end erstellen Sie nach bew&auml;hrter Art ein Entity Data Model mit den Daten der zu verwendenden Datenbank.<\/p>\n<p>F&uuml;gen Sie also ein neues Element des Typs <b>ADO.NET Entity Data Model <\/b>zum Projekt hinzu und nennen Sie es <b>BestellverwaltungModel<\/b>. Im folgenden Dialog behalten Sie den Eintrag <b>EF Designer aus Datenbank <\/b>bei. Im n&auml;chsten Dialog klicken Sie auf <b>Neue Verbindung <\/b>und w&auml;hlen dort <b>Microsoft SQL Server <\/b>aus.<\/p>\n<p>Im Dialog Verbindungseigenschaften geben Sie <b>(localdb)\\MSSQLLocalDB <\/b>als Servername und <b>Bestellverwaltung<\/b> unter <b>Mit Datenbank verbinden <\/b>ein (siehe Bild 1). Wir gehen an dieser Stelle davon aus, dass Sie die Bestellverwaltung-Datenbank bereits an den SQL Server oder LocalDB angeh&auml;ngt haben (dies erledigen Sie am einfachsten &uuml;ber den SQL Server Management Studio).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_05\/pic_56_001.png\" alt=\"Hinzuf&uuml;gen der Verbindung\" width=\"349,7625\" height=\"534,6485\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Hinzuf&uuml;gen der Verbindung<\/span><\/b><\/p>\n<p>Kehren Sie zum vorherigen Dialog zur&uuml;ck und klicken Sie auf <b>Weiter<\/b>. Die Verbindungseinstellungen wollen wir unter dem Namen <b>BestellverwaltungEntities <\/b>speichern. Behalten Sie im folgenden Schritt den Wert <b>Entity Framework 6.x <\/b>bei.<\/p>\n<p>Unter <b>W&auml;hlen Sie Ihre Datenbankobjekte und Einstellungen <\/b>klicken Sie einfach den Eintrag <b>Tabellen <\/b>an. Damit f&uuml;gen Sie alle Tabellen zum Entity Data Model hinzu. Unter <b>Modelnamespace: <\/b>k&ouml;nnen Sie den Wert <b>BestellverwaltungModel <\/b>beibehalten.<\/p>\n<p>Danach erstellt Visual Studio das Entity Data Model und zeigt dieses in einem Diagramm an. &Auml;ndern Sie hier noch die Namen der Klassen vom Plural in den Singular, also etwa von <b>Kategorien <\/b>in <b>Kategorie<\/b>.<\/p>\n<p>Nun erstellen Sie das Projekt erstmalig mit dem Men&uuml;eintrag <b>Erstellen|<Projektname> erstellen<\/b>.<\/p>\n<h2>Felder zum Fenster hinzuf&uuml;gen<\/h2>\n<p>Nun schauen wir uns den einfachsten Weg an, um die Felder einer Klasse des Entity Data Models zu einem Fenster hinzuzuf&uuml;gen &#8211; und zwar zum Fenster <b>MainWindow.xaml<\/b>. Dies wollen wir dazu einfach aus einer entsprechenden Liste in das Fenster ziehen &#8211; &auml;hnlich, wie es bei der Feldliste beim Formularentwurf unter Access geschieht.<\/p>\n<p>Um dies zu erledigen, m&uuml;ssen wir zun&auml;chst auf Basis des Entity Data Models eine Datenquelle erstellen. Dazu aktivieren Sie, sofern noch nicht geschehen, den Bereich <b>Datenquellen<\/b>, und zwar &uuml;ber den Men&uuml;befehl <b>Ansicht|Weitere Fenster|Datenquellen<\/b>. Der Dialog erwartet Sie dann wie in Bild 2.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_05\/pic_56_002.png\" alt=\"Noch keine Datenquellen vorhanden\" width=\"424,7115\" height=\"286,4334\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Noch keine Datenquellen vorhanden<\/span><\/b><\/p>\n<p>Hier ben&ouml;tigen wir nun eine Datenquelle. Dazu klicken Sie auf den Link <b>Neue Datenquelle hinzuf&uuml;gen&#8230; <\/b>und &ouml;ffnen so den Assistenten zum Konfigurieren von Datenquellen. Dieser bietet vier m&ouml;gliche Quellen f&uuml;r die Daten an, von denen wir den Eintrag <b>Objekt <\/b>ausw&auml;hlen (siehe Bild 3).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_05\/pic_56_003.png\" alt=\"Die Daten sollen aus einem Objekt bezogen werden.\" width=\"499,6607\" height=\"337,1756\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Die Daten sollen aus einem Objekt bezogen werden.<\/span><\/b><\/p>\n<p>Im folgenden Schritt werden dann die Objekte des Projekts angezeigt. Unter dem Projektnamen finden Sie einen weiteren Eintrag gleichen Namens, der dann schlie&szlig;lich die Klassen des Projekts anbietet, unter anderem eben auch die Klassen des Entity Data Models, also <b>Kunde<\/b>, <b>Artikel<\/b>, <b>Bestellung <\/b>et cetera. Hier w&auml;hlen Sie nun wie in Bild 4 den Eintrag <b>Kunde <\/b>aus.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_05\/pic_56_004.png\" alt=\"Ausw&auml;hlen des Quellobjekts, hier namens Kunde\" width=\"499,6607\" height=\"387,5231\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Ausw&auml;hlen des Quellobjekts, hier namens Kunde<\/span><\/b><\/p>\n<p>Nach einem Klick auf die Schaltfl&auml;che <b>Fertigstellen <\/b>erscheinen die Felder der Klasse <b>Kunde <\/b>im <b>Datenquellen<\/b>-Dialog (siehe Bild 5).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_05\/pic_56_005.png\" alt=\"Nun steht eine Datenquelle zur Verf&uuml;gung.\" width=\"424,7115\" height=\"307,1751\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Nun steht eine Datenquelle zur Verf&uuml;gung.<\/span><\/b><\/p>\n<p>Damit haben wir uns au&szlig;erdem einen neuen Eintrag im neuen Ordner <b>DataSources <\/b>im Bereich <b>Properties <\/b>des Projektmappen-Explorers geholt &#8211; und zwar namens <b>Kunde.datasource <\/b>(siehe Bild 6).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_05\/pic_56_006.png\" alt=\"Die Datenquelle im Projektmappen-Explorer\" width=\"424,7115\" height=\"341,8161\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 6: Die Datenquelle im Projektmappen-Explorer<\/span><\/b><\/p>\n<h2>Felder per Drag and Drop<\/h2>\n<p>Wenn Sie nun die Entwurfsansicht des Fensters <b>MainWindow.xaml <\/b>aktivieren, &auml;ndert sich die Ansicht im Bereich <b>Datenquellen <\/b>ein wenig (siehe Bild 7). Sie k&ouml;nnen nun per Mausklick auf die einzelnen Eintr&auml;ge jeweils ein Kombinationsfeld aktivieren, &uuml;ber das sich Feineinstellungen f&uuml;r das Hinzuf&uuml;gen der einzelnen Felder zum Fenster vornehmen lassen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_05\/pic_56_007.png\" alt=\"Ge&auml;nderte Ansicht bei gleichzeitiger Anzeige einer .xaml-Datei\" width=\"424,7115\" height=\"307,1751\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 7: Ge&auml;nderte Ansicht bei gleichzeitiger Anzeige einer .xaml-Datei<\/span><\/b><\/p>\n<p>Die f&uuml;r unseren Fall wichtigste Feineinstellung, wenn wir in einem Rutsch alle Felder in das Fenster <b>MainWindows.xaml <\/b>ziehen wollen, ist die Auswahl der zu erstellenden Steuerelemente (siehe Bild 8). Mit <b>DataGrid <\/b>erstellen Sie ein DataGrid mit allen gew&uuml;nschten Feldern. <b>ComboBox <\/b>erstellt ein Kombinationsfeld, was in diesem Szenario jedoch Nacharbeiten erfordert. <b>Liste <\/b>erstellt ein Listenfeld mit den Daten der Datenquelle. Und <b>Detail <\/b>erstellt schlie&szlig;lich die gew&uuml;nschte Ansicht &#8211; daher w&auml;hlen wir diesen Eintrag aus, was dazu f&uuml;hrt, dass links neben dem Eintrag <b>Kunde <\/b>ein entsprechendes Icon erscheint. Nun ziehen Sie einfach den kompletten <b>Kunde<\/b>-Knoten in den Entwurf des Fensters <b>MainWindow.xaml<\/b>. Das Ergebnis sieht wie in Bild 9 aus. <\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_05\/pic_56_009.png\" alt=\"Detailfenster per Drag and Drop\" width=\"599,593\" height=\"336,968\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 8: Detailfenster per Drag and Drop<\/span><\/b><\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_05\/pic_56_008.png\" alt=\"Festlegen der Ansicht\" width=\"424,7115\" height=\"307,1751\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 9: Festlegen der Ansicht<\/span><\/b><\/p>\n<p>Wenn wir nun das Projekt starten, erhalten wir zwar das Fenster mit den Feldern in der noch unsortieren Anordnung und ohne Kombinationsfelder etwa f&uuml;r das Feld <b>AnredeID<\/b>, aber es zeigt keine Daten an (siehe Bild 10). Was nun<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_05\/pic_56_010.png\" alt=\"Detailfenster noch ohne Daten\" width=\"349,7625\" height=\"369,1425\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 10: Detailfenster noch ohne Daten<\/span><\/b><\/p>\n<p>Schauen wir uns zun&auml;chst an, was wir durch das Hinzuf&uuml;gen der Steuerelemente per Drag and Drop &uuml;berhaupt f&uuml;r &Auml;nderungen durchgef&uuml;hrt haben &#8211; beziehungsweise welche &Auml;nderungen automatisch erledigt wurden. Dass f&uuml;r jedes Feld der Datenquelle jeweils ein Steuerelement zum Fenster hinzugef&uuml;gt wurde, haben Sie ja bereits gesehen. Dementsprechend hat auch eine Menge Code Einzug in das <b>.xaml<\/b>-Dokument <b>MainWindow.xaml <\/b>genommen. <\/p>\n<p>Im oberen Teil wurde ein Eigenschaftselement namens <b>Windows.Resources <\/b>mit folgendem Inhalt eingef&uuml;gt:<\/p>\n<pre>&lt;Window.Resources&gt;\r\n     &lt;CollectionViewSource x:Key=\"kundeViewSource\" d:DesignSource=\"{d:DesignInstance {x:Type local:Kunde}, CreateList=True}\"\/&gt;\r\n&lt;\/Window.Resources&gt;<\/pre>\n<p>Das <b>CollectionViewSource<\/b>-Element ist eine Verbindung zwischen der Benutzeroberfl&auml;che und den Daten. Es erh&auml;lt automatisch &uuml;ber das Attribut <b>key <\/b>einen Schl&uuml;ssel namens <b>kundeViewSource<\/b>, damit man es sp&auml;ter in den Elementen der Benutzeroberfl&auml;che referenzieren kann. Der hintere Teil enth&auml;lt Informationen &uuml;ber das Aussehen der gebundenen Steuerelemente zur Entwurfszeit. Wenn Sie den Teil <b>d:DesignSource=&#8221;{d:DesignInstance {x:Type local:Kunde}, CreateList=True}&#8221; <\/b>entfernen, werden Sie den Unterschied erkennen.<\/p>\n<p>Schauen wir weiter nach unten, sehen wir ein <b>Grid<\/b>-Element, dessen wichtigste Eigenschaft in diesem Zusammenhang das Attribut <b>DataContext <\/b>ist.<\/p>\n<p>Dieses enth&auml;lt den Wert <b>{StaticResource kundeViewSource} <\/b>und legt somit fest, dass es die Daten aus der weiter oben festgelegten statischen Ressource beziehen soll (siehe Listing 1). Dies ist die Voraussetzung daf&uuml;r, dass wir f&uuml;r die im <b>Grid<\/b>-Element enthaltenen Steuerelemente Bindungen festlegen k&ouml;nnen, &uuml;ber die sie dann auf die Daten der <b>CollectionViewSource <\/b>zugreifen k&ouml;nnen. Dies gilt f&uuml;r alle Elemente, die dem <b>Grid<\/b>-Element untergeordnet sind.<\/p>\n<pre>&lt;Grid x:Name=\"grid1\" DataContext=\"{StaticResource kundeViewSource}\" HorizontalAlignment=\"Left\" Margin=\"204,55,0,0\" \r\n         VerticalAlignment=\"Top\"&gt;\r\n     &lt;Grid.ColumnDefinitions&gt;\r\n         &lt;ColumnDefinition Width=\"Auto\"\/&gt;\r\n         &lt;ColumnDefinition Width=\"Auto\"\/&gt;\r\n     &lt;\/Grid.ColumnDefinitions&gt;\r\n     &lt;Grid.RowDefinitions&gt;\r\n         &lt;RowDefinition Height=\"Auto\"\/&gt;\r\n         ...\r\n     &lt;\/Grid.RowDefinitions&gt;\r\n     &lt;Label Content=\"Anrede ID:\" Grid.Column=\"0\" HorizontalAlignment=\"Left\" Margin=\"3\" Grid.Row=\"0\" \r\n         VerticalAlignment=\"Center\"\/&gt;\r\n     &lt;TextBox x:Name=\"anredeIDTextBox\" Grid.Column=\"1\" HorizontalAlignment=\"Left\" Height=\"23\" Margin=\"3\" Grid.Row=\"0\" \r\n         Text=\"{Binding AnredeID, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true}\" \r\n         VerticalAlignment=\"Center\" Width=\"120\"\/&gt;\r\n     &lt;Label Content=\"EMail:\" ... \/&gt;\r\n         &lt;TextBox x:Name=\"eMailTextBox\" ...\r\n             Text=\"{Binding EMail, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true}\" ... \/&gt;\r\n     &lt;Label Content=\"Firma:\" ... \/&gt;\r\n     &lt;TextBox x:Name=\"firmaTextBox\" \r\n         Text=\"{Binding Firma, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true}\" ... \/&gt;\r\n     &lt;Label Content=\"Geburtsdatum:\" ... \/&gt;\r\n     &lt;DatePicker x:Name=\"geburtsdatumDatePicker\" ...\r\n         SelectedDate=\"{Binding Geburtsdatum, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true}\" ... \/&gt;\r\n     &lt;Label Content=\"ID:\" Grid.Column=\"0\" HorizontalAlignment=\"Left\" Margin=\"3\" Grid.Row=\"4\" VerticalAlignment=\"Center\"\/&gt;\r\n     &lt;TextBox x:Name=\"iDTextBox\" ...\r\n         Text=\"{Binding ID, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true}\" ... \/&gt;\r\n     &lt;Label Content=\"Nachname:\" ... \/&gt;\r\n     &lt;TextBox x:Name=\"nachnameTextBox\" ... \r\n         Text=\"{Binding Nachname, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true}\" ... \/&gt;\r\n     &lt;Label Content=\"Ort:\" ... \/&gt;\r\n     &lt;TextBox x:Name=\"ortTextBox\" ... \r\n     Text=\"{Binding Ort, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true}\" ... \/&gt;\r\n     &lt;Label Content=\"PLZ:\" ... \/&gt;\r\n     &lt;TextBox x:Name=\"pLZTextBox\" ... \r\n         Text=\"{Binding PLZ, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true}\" ... \/&gt;\r\n     &lt;Label Content=\"Strasse:\" ... \/&gt;\r\n     &lt;TextBox x:Name=\"strasseTextBox\" ...\r\n         Text=\"{Binding Strasse, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true}\" ... \/&gt;\r\n     &lt;Label Content=\"Telefon:\" ... \/&gt;\r\n     &lt;TextBox x:Name=\"telefonTextBox\" ... \r\n         Grid.Row=\"9\" Text=\"{Binding Telefon, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true}\" ... \/&gt;\r\n     &lt;Label Content=\"Vorname:\" ... \/&gt;\r\n     &lt;TextBox x:Name=\"vornameTextBox\" ...\r\n     Text=\"{Binding Vorname, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true}\" \/&gt;\r\n&lt;\/Grid&gt;<\/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\/55000056\/\">\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\/55000056?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\/55000056\/\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"a72fca7b92\"\/>\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>Wie Sie ein DataGrid-Steuerelement mit den Daten aus einem Entity Data Model f&uuml;ttern, haben Sie bereits im Artikel &#8220;Einf&uuml;hrung in das Entity Framework&#8221; erfahren. Allerdings m&ouml;chten Sie gelegentlich auch in den Datens&auml;tzen einer Tabelle bl&auml;ttern, die enthaltenen Daten &auml;ndern oder neue Datens&auml;tze hinzuf&uuml;gen &#8211; ganz, wie es unter Access in einem einfachen Detailformular m&ouml;glich war. Dieser Artikel zeigt, wie Sie dies mit den eingebauten Funktionen von Visual Studio einfach bewerkstelligen k&ouml;nnen.<\/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,66052016,44000002,44000021,44000022],"tags":[],"yst_prominent_words":[],"class_list":["post-55000056","post","type-post","status-publish","format-standard","hentry","category-662016","category-66052016","category-Benutzeroberflaeche_mit_WPF","category-Entity_Framework","category-Von_Access_zu_NET"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000056","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=55000056"}],"version-history":[{"count":0,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000056\/revisions"}],"wp:attachment":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/media?parent=55000056"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/categories?post=55000056"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/tags?post=55000056"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/yst_prominent_words?post=55000056"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}