{"id":55000173,"date":"2019-04-01T00:00:00","date_gmt":"2020-03-27T19:37:05","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=173"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Entity_Framework_Bilder_in_WPF","status":"publish","type":"post","link":"https:\/\/vbentwickler.de\/Entity_Framework_Bilder_in_WPF\/","title":{"rendered":"Entity Framework: Bilder in WPF"},"content":{"rendered":"<p><b>Im Artikel &#8220;PowerApps: Bilder in Datenbank speichern&#8221; haben wir gezeigt, wie Sie mit einer PowerApp &uuml;ber ein Smartphone oder ein Tablet Bilder aufnehmen und diese dann in einer Datenbank speichern. Nun wollen wir uns ansehen, wie Sie diese Bilder aus der Datenbank in einer WPF-Anwendung anzeigen, die &uuml;ber das Entity Framework auf die Tabellen der Datenbank zugreift.<\/b><\/p>\n<h2>Voraussetzung<\/h2>\n<p>Um die Beispiele dieses Artikels nachzuvollziehen, ben&ouml;tigen Sie eine Datenbank, die eine Tabelle namens <b>Fotos <\/b>enth&auml;lt &#8211; genau wie die, die wir im oben genannten Artikel erstellt haben. Diese enth&auml;lt ein Prim&auml;rschl&uuml;sselfeld namens <b>ID <\/b>und mit dem Datentyp <b>int <\/b>sowie ein Feld namens <b>Foto <\/b>und mit dem Datentyp <b>image<\/b>. Unsere Beispieldatenbank liegt auf einem Azure-Server. Sie k&ouml;nnen aber nat&uuml;rlich auch unsere Beispieldatenbank mit ein paar Beispielfotos aus dem SQL-Skript aus dem Download auf einem lokalen SQL Server anlegen und mit der folgenden Anwendung auf diese Datenbank zugreifen.<\/p>\n<h2>Vorbereitung<\/h2>\n<p>Wir erstellen in Visual Studio ein neues Projekt auf Basis der Vorlage <b>Visual Basic|Windows Desktop|WPF-App<\/b>. Da wir diesmal nicht, wie so oft in den vorherigen Ausgaben, ein Code First-Model erstellen, sondern mit einer bestehenden Datenbank starten, noch einmal eine kurze Beschreibung der n&ouml;tigen Schritte. Dem neuen Projekt f&uuml;gen wir als Erstes ein neues Element hinzu und w&auml;hlen den Typ <b>ADO.NET Entity Data Model <\/b>aus. Nachdem wir als Name <b>FotoverwaltungContext <\/b>eingestellt haben, klicken wir auf <b>Hinzuf&uuml;gen <\/b>(siehe Bild 1).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2019_02\/pic_173_001.png\" alt=\"Einf&uuml;gen des Entity Data Models\" width=\"649,559\" height=\"331,5145\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Einf&uuml;gen des Entity Data Models<\/span><\/b><\/p>\n<p>Danach w&auml;hlen wir als Modellinhalt <b>Code First aus Datenbank <\/b>aus (siehe Bild 2). Der folgende Dialog bietet die M&ouml;glichkeit zur Auswahl der Datenverbindung. Hier klicken wir auf die Schaltfl&auml;che <b>Neue Verbindung<\/b>. Im nun erscheinenden Dialog namens <b>Verbindungseigenschaften <\/b>geben Sie unter <b>Servername <\/b>den Namen des gew&uuml;nschten Servers ein. Danach w&auml;hlen Sie die Authentifizierungsmethode aus &#8211; beim Zugriff auf eine Azure-Datenbank immer die SQL Server-Authentifizierung &#8211; und geben die Zugangsdaten ein. Schlie&szlig;lich w&auml;hlen Sie die Datenbank aus und best&auml;tigen nach einem erfolgreichen Test mit einem Klick auf die Schaltfl&auml;che <b>Testverbindung <\/b>die Eingaben mit <b>OK<\/b> (siehe Bild 3).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2019_02\/pic_173_003.png\" alt=\"Auswahl der Datenquelle\" width=\"499,6607\" height=\"602,479\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Auswahl der Datenquelle<\/span><\/b><\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2019_02\/pic_173_002.png\" alt=\"Auswahl des Typs Code First aus Datenbank\" width=\"649,559\" height=\"408,0833\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Auswahl des Typs Code First aus Datenbank<\/span><\/b><\/p>\n<p>Danach kehren wir zum Dialog Assistent f&uuml;r Entity Data Model zur&uuml;ck, der Sie fragt, ob Sie Benutzername und Kennwort wirklich in der Verbindungszeichenfolge speichern wollen (siehe Bild 4). F&uuml;r dieses Beispiel lassen wir diese Daten in der Verbindungszeichenfolge, aber im Artikel <b>Zugangsdaten f&uuml;r SQL Server abfragen <\/b>zeigen wir, wie Sie diese jeweils beim Start der Anwendung abfragen k&ouml;nnen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2019_02\/pic_173_004.png\" alt=\"Einstellen weiterer Eigenschaften\" width=\"499,6607\" height=\"442,9731\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Einstellen weiterer Eigenschaften<\/span><\/b><\/p>\n<p>Schlie&szlig;lich w&auml;hlen wir im Schritt <b>W&auml;hlen Sie Ihre Datenbankobjekte und Einstellungen <\/b>noch die Tabelle aus, deren Daten wir in der Anwendung anzeigen wollen. Wir haben die Tabelle <b>tblFotos <\/b>einfach in eine bestehende Datenbank eingef&uuml;gt, daher m&uuml;ssen wir diese einzeln ausw&auml;hlen (siehe Bild 5).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2019_02\/pic_173_005.png\" alt=\"Auswahl der gew&uuml;nschten Tabelle\" width=\"549,6265\" height=\"429,368\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Auswahl der gew&uuml;nschten Tabelle<\/span><\/b><\/p>\n<p>Dieser Dialog bietet auch noch die Option <b>Generierte Objektnamen in den Singular oder Plural setzen <\/b>an. Da die Tabelle ohnehin das Pr&auml;fix <b>tbl <\/b>im Namen <b>tblFotos <\/b>enth&auml;lt, das wir in unserem Entity Data Model nicht als Bezeichnung der Entit&auml;t sehen wollen, m&uuml;ssen wir hier ohnehin noch ein Mapping vornehmen.<\/p>\n<p>Nach einem Klick auf die Schaltfl&auml;che <b>Fertigstellen <\/b>finden Sie zwei neue Elemente im Projektmappen-Explorer vor: die Klasse <b>FotoverwaltungContext.vb<\/b>, die von der Klasse <b>DbContext <\/b>erbt und zum Beispiel das <b>DbSet <\/b>namens <b>tblFotos <\/b>f&uuml;r den Zugriff auf die Liste der Entit&auml;ten auf Basis der in der Tabelle gespeicherten Daten bereitstellt sowie die Klasse <b>tblFotos.vb <\/b>als Entit&auml;tsklasse f&uuml;r einen Datensatz der Tabelle <b>tblFotos<\/b>.<\/p>\n<p>Die Benennung der Klasse und des Namens des <b>DbSet<\/b>-Elements entspricht nicht unseren Vorstellungen, also &auml;ndern wir das ein wenig ab. Wie das genau gelingt, zeigen wir Ihnen im Artikel <b>EDM f&uuml;r bestehende Datenbank mit Code First<\/b>. Zum schnellen Nachbauen hier die notwendigen &Auml;nderungen.  Als Erstes &auml;ndern wir den Namen der Klasse <b>tblFotos.vb <\/b>in <b>Foto.vb<\/b>.<\/p>\n<p>In der Klasse <b>Foto.vb <\/b>m&uuml;ssen wir den Namen der Eigenschaft <b>Foto <\/b>in Fotodaten &auml;ndern, da keine Eigenschaft genauso hei&szlig;en darf wie die Klasse:<\/p>\n<pre>Partial Public Class Foto\r\n     <span style=\"color:blue;\">Public <\/span>Property ID<span style=\"color:blue;\"> As Integer<\/span>\r\n     &lt;Column(TypeName:=\"image\")&gt;\r\n     &lt;Required&gt;\r\n     <span style=\"color:blue;\">Public <\/span>Property Fotodaten<span style=\"color:blue;\"> As Byte<\/span>()\r\n<span style=\"color:blue;\">End Class<\/span><\/pre>\n<p>Damit die Klasse <b>Foto <\/b>auf die Tabelle <b>tblFotos <\/b>gemappt wird und die Eigenschaft <b>Fotodaten <\/b>der Klasse auf das Feld <b>Foto <\/b>der Tabelle, f&uuml;gen wir folgende Zeilen zur Methode <b>OnModelCreating <\/b>der Klasse <b>FotoverwaltungContext.vb <\/b>hinzu:<\/p>\n<pre>Protected Overrides Sub OnModelCreating(ByVal modelBuilder<span style=\"color:blue;\"> As <\/span>DbModelBuilder)\r\n     modelBuilder.Entity(Of Foto)().\r\n         ToTable(\"tblFotos\").\r\n         Property(Function(t) t.Fotodaten).HasColumnName(\"Foto\")\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Damit k&ouml;nnen wir nun testen, ob der Zugriff auf die Datens&auml;tze der Tabelle <b>tblFotos <\/b>gelingt. Dazu f&uuml;gen wir der Klasse <b>MainWindow.xaml.vb <\/b>zun&auml;chst eine Konstruktor-Methode hinzu. In dieser erstellen wir einen Datenbankkontext f&uuml;r den Zugriff auf die Datenbank. Au&szlig;erdem versuchen wir, auf das erste Element der Auflistung <b>Fotos <\/b>dieses Kontextes zuzugreifen und den Inhalt der Eigenschaften <b>ID <\/b>und <b>Fotodaten <\/b>in einem Meldungsfenster auszugeben:<\/p>\n<pre><span style=\"color:blue;\">Class<\/span> MainWindow\r\n     <span style=\"color:blue;\">Public <\/span>Sub New()\r\n         <span style=\"color:blue;\">Dim <\/span>dbContext<span style=\"color:blue;\"> As <\/span>FotoverwaltungContext\r\n         dbContext = <span style=\"color:blue;\">New<\/span> FotoverwaltungContext\r\n         <span style=\"color:blue;\">Dim <\/span>foto<span style=\"color:blue;\"> As <\/span>Foto\r\n         foto = dbContext.Fotos.First()\r\n         MessageBox.Show(foto.ID.ToString() + <span style=\"color:blue;\">vbCrLf<\/span> + <span style=\"color:blue;\">vbCrLf<\/span> + foto.Fotodaten.ToString())\r\n     End Sub\r\n<span style=\"color:blue;\">End Class<\/span><\/pre>\n<p>Sofern Sie bereits einen Datensatz zu dieser Tabelle hinzugef&uuml;gt haben, werden die entsprechenden Informationen beim Start der Anwendung ausgegeben.<\/p>\n<h2>Bild im WPF-Fenster anzeigen<\/h2>\n<p>Nun schauen wir uns an, wie wir den Inhalt der Eigenschaft <b>Fotodaten<\/b>, also des Feldes <b>Foto <\/b>der Tabelle <b>tblFotos<\/b>, in einem Steuer-element in einem WPF-Fenster anzeigen. Dazu ben&ouml;tigen wir zun&auml;chst ein geeignetes Steuer-element. Wir f&uuml;gen dem Fenster <b>MainWindow.xaml <\/b>zun&auml;chst ein <b>Image<\/b>-Steuerelement hinzu, das wir mit dem Bild aus der Eigenschaft <b>Fotodaten<\/b> f&uuml;llen wollen. Das Steuer-element ziehen wir einfach aus der Toolbox in das WPF-Fenster. Dadurch entsteht etwa der folgende XAML-Code:<\/p>\n<pre>&lt;Image HorizontalAlignment=\"Left\" Height=\"288\" Margin=\"112,50,0,0\" VerticalAlignment=\"Top\" Width=\"364\"\/&gt;<\/pre>\n<p>Das Bild ist im Feld <b>Foto <\/b>der Tabelle <b>tblFotos <\/b>unter dem Datentyp <b>image <\/b>gespeichert (siehe Bild 6). Wir m&uuml;ssen nun einen Weg finden, den Inhalt dieses Feldes im <b>Image<\/b>-Steuerelement anzuzeigen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2019_02\/pic_173_006.png\" alt=\"Das Feld Foto in der Tabelle tblFotos\" width=\"449,6946\" height=\"419,463\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 6: Das Feld Foto in der Tabelle tblFotos<\/span><\/b><\/p>\n<p>Dazu verarbeiten wir dieses zun&auml;chst in der Code behind-Klasse <b>MainWindow.xaml.vb<\/b>. Hier verschieben wir die Deklaration des Datenbankkontexts zun&auml;chst aus der Konstruktor-Methode in den allgemeinen Teil der Klasse:<\/p>\n<pre><span style=\"color:blue;\">Class<\/span> MainWindow\r\n     <span style=\"color:blue;\">Dim <\/span>dbContext<span style=\"color:blue;\"> As <\/span>FotoverwaltungContext<\/pre>\n<p>Dann deklarieren wir eine private Variable namens <b>m_Fotodaten<\/b> mit dem Datentyp <b>BitmapImage<\/b>, die wir &uuml;ber die folgende <b>Property <\/b>namens <b>Fotodaten <\/b>mit dem gleichen Datentyp f&uuml;r den lesenden und schreibenden Zugriff verf&uuml;gbar machen:<\/p>\n<pre>     <span style=\"color:blue;\">Dim <\/span>m_Fotodaten<span style=\"color:blue;\"> As <\/span>BitmapImage\r\n     <span style=\"color:blue;\">Public <\/span>Property Fotodaten<span style=\"color:blue;\"> As <\/span>BitmapImage\r\n         Get\r\n             Return m_Fotodaten\r\n         End Get\r\n         Set(value<span style=\"color:blue;\"> As <\/span>BitmapImage)\r\n             m_Fotodaten = value\r\n         End <span style=\"color:blue;\">Set<\/span>\r\n     End Property<\/pre>\n<p>Danach erweitern wir die Konstruktor-Methode <b>New<\/b>.  Nach dem Zuweisen des Datenbankkontextes zur Variablen dbContext deklarieren wir ein Objekt des Typs <b>Foto <\/b>und weisen diesem das erste Element der mit der Auflistung <b>Fotots <\/b>eingelesenen Tabelle <b>tblFotos <\/b>zu:<\/p>\n<pre>     <span style=\"color:blue;\">Public <\/span>Sub New()\r\n         dbContext = <span style=\"color:blue;\">New<\/span> FotoverwaltungContext\r\n         <span style=\"color:blue;\">Dim <\/span>foto<span style=\"color:blue;\"> As <\/span>Foto\r\n         foto = dbContext.Fotos.First()<\/pre>\n<p>Dann lesen wir zun&auml;chst den Inhalt der Eigenschaft <b>Fotodaten <\/b>(also eigentlich des Feldes <b>Foto <\/b>der Tabelle <b>tblFotos<\/b>) in ein Objekt des Typs <b>Byte <\/b>mit dem Namen <b>blob <\/b>ein. Danach erstellen wir ein Objekt namens <b>stream <\/b>mit dem Typ <b>MemoryStream<\/b>, in das wir den Inhalt des Byte-Arrays <b>blob <\/b>mit der <b>Write<\/b>-Methode schreiben. Dann stellen wir die Position des <b>Stream<\/b>-Objekts auf die Position <b>0 <\/b>ein:<\/p>\n<pre>         <span style=\"color:blue;\">Dim <\/span>blob<span style=\"color:blue;\"> As Byte<\/span>() = foto.Fotodaten\r\n         <span style=\"color:blue;\">Dim <\/span>stream<span style=\"color:blue;\"> As <\/span>MemoryStream = <span style=\"color:blue;\">New<\/span> MemoryStream()\r\n         stream.Write(blob, 0, blob.Length)\r\n         stream.Position = 0<\/pre>\n<p>Nun kommt erstmals das Objekt des Typs <b>BitmapImage <\/b>ins Spiel, das wir anschlie&szlig;end auch dem <b>Image<\/b>-Steuerelement als Quelle zuweisen k&ouml;nnen. Dieses erstellen wir unter dem Namen <b>img <\/b>und initialisieren es mit der Methode <b>BeginInit<\/b>. Dann weisen wir als <b>StreamSource <\/b>den Inhalt der <b>MemoryStream<\/b>-Variablen <b>stream <\/b>zu und beenden die Initialisierung von <b>img <\/b>mit der <b>EndInit<\/b>-Methode:<\/p>\n<pre>         <span style=\"color:blue;\">Dim <\/span>img<span style=\"color:blue;\"> As <\/span>BitmapImage\r\n         img = <span style=\"color:blue;\">New<\/span> BitmapImage\r\n         img.BeginInit()\r\n         img.StreamSource = stream\r\n         img.EndInit()<\/pre>\n<p>Schlie&szlig;lich weisen wir <b>img <\/b>der &ouml;ffentlichen Eigenschaft <b>Fotodaten <\/b>zu und stellen die aktuelle Klasse als <b>DataContext <\/b>der <b>WPF<\/b>-Seite ein:<\/p>\n<pre>         Fotodaten = img\r\n         DataContext = Me\r\n     End Sub\r\n<span style=\"color:blue;\">End Class<\/span><\/pre>\n<p>Danach m&uuml;ssen wir nur noch der Eigenschaft <b>Source <\/b>des <b>Image<\/b>-Elements im XAML-Code den Pfad zur Eigenschaft <b>Fotodaten <\/b>mitteilen:<\/p>\n<pre>&lt;Image HorizontalAlignment=\"Left\" Height=\"288\" Margin=\"112,50,0,0\" VerticalAlignment=\"Top\" Width=\"364\" Source=\"{Binding Path=Fotodaten}\"\/&gt;<\/pre>\n<p>*****Bild mit Bild*****<\/p>\n<h2>Durch Bilder bl&auml;ttern<\/h2>\n<p>Wenn wir nun nicht nur ein Bild anzeigen, sondern auch durch alle vorhandenen Bilder bl&auml;ttern wollen, ben&ouml;tigen wir prinzipiell die gleichen Techniken, die wir auch sonst zum Bl&auml;ttern in Datens&auml;tzen verwenden. Dazu erstellen wir ein neues Fenster namens <b>FotosBlaettern.xaml<\/b>. Dieses &ouml;ffnen wir vom Startfenster <b>MainWindow.xaml <\/b>aus mit einer neuen Schaltfl&auml;che, der wir die folgenden Codezeilen hinzuf&uuml;gen:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>btnBeispielZumBlaettern_Click(sender<span style=\"color:blue;\"> As Object<\/span>, e<span style=\"color:blue;\"> As <\/span>RoutedEventArgs)\r\n     <span style=\"color:blue;\">Dim <\/span>wnd<span style=\"color:blue;\"> As <\/span>FotosBlaettern\r\n     wnd = <span style=\"color:blue;\">New<\/span> FotosBlaettern\r\n     wnd.ShowDialog()\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Die Techniken, die wir weiter oben kennengelernt haben, k&ouml;nnen wir f&uuml;r das Bl&auml;ttern durch Datens&auml;tze mit Bildern ebenfalls verwenden. Au&szlig;erdem nutzen wir einige Techniken, die wir im Artikel <b>EDM: Bl&auml;ttern in Datens&auml;tzen <\/b>vorgestellt haben. Im XAML-Code verwenden wir in den Ressourcen einige DataTrigger, mit denen wir die Schaltfl&auml;chen aktivieren und deaktivieren wollen (siehe ebenfalls im oben genannten Artikel):<\/p>\n<pre>&lt;Window x:Class=\"FotosBlaettern\" ... Title=\"FotosBlaettern\" Height=\"450\" Width=\"800\"&gt;\r\n     &lt;Window.Resources&gt;\r\n         &lt;Style x:Key=\"ButtonVorheriger\" TargetType=\"{x:Type Button}\"&gt;\r\n             &lt;Style.Triggers&gt;\r\n                 &lt;DataTrigger Binding=\"{Binding Erster}\" Value=\"False\"&gt;\r\n                     &lt;Setter Property=\"IsEnabled\" Value=\"False\"&gt;&lt;\/Setter&gt;\r\n                 &lt;\/DataTrigger&gt;\r\n             &lt;\/Style.Triggers&gt;\r\n         &lt;\/Style&gt;\r\n         &lt;Style x:Key=\"ButtonNaechster\" TargetType=\"{x:Type Button}\"&gt;\r\n             &lt;Style.Triggers&gt;\r\n                 &lt;DataTrigger Binding=\"{Binding Letzter}\" Value=\"False\"&gt;\r\n                     &lt;Setter Property=\"IsEnabled\" Value=\"False\"&gt;&lt;\/Setter&gt;\r\n                 &lt;\/DataTrigger&gt;\r\n             &lt;\/Style.Triggers&gt;\r\n         &lt;\/Style&gt;\r\n     &lt;\/Window.Resources&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\/55000173\/\">\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\/55000173?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\/55000173\/\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"dbce743e9d\"\/>\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>Im Artikel &#8220;PowerApps: Bilder in Datenbank speichern&#8221; haben wir gezeigt, wie Sie mit einer PowerApp &uuml;ber ein Smartphone oder ein Tablet Bilder aufnehmen und diese dann in einer Datenbank speichern. Nun wollen wir uns ansehen, wie Sie diese Bilder aus der Datenbank in einer WPF-Anwendung anzeigen, die &uuml;ber das Entity Framework auf die Tabellen der Datenbank zugreift.<\/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":[66022019,662019,44000002,44000015],"tags":[],"yst_prominent_words":[],"class_list":["post-55000173","post","type-post","status-publish","format-standard","hentry","category-66022019","category-662019","category-Benutzeroberflaeche_mit_WPF","category-WPFSteuerelemente"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000173","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=55000173"}],"version-history":[{"count":0,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000173\/revisions"}],"wp:attachment":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/media?parent=55000173"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/categories?post=55000173"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/tags?post=55000173"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/yst_prominent_words?post=55000173"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}