{"id":55000047,"date":"2016-08-01T00:00:00","date_gmt":"2020-03-27T19:21:16","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=47"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Entity_Data_Model_fuer_eine_Datenbank_erstellen","status":"publish","type":"post","link":"https:\/\/vbentwickler.de\/Entity_Data_Model_fuer_eine_Datenbank_erstellen\/","title":{"rendered":"Entity Data Model f&uuml;r eine Datenbank erstellen"},"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 zun&auml;chst, wie Sie die Verbindung zu einer Beispieldatenbank einrichten und dann die f&uuml;r den Zugriff per C# oder die Anzeige in WPF-Fenstern und -Steuerelementen n&ouml;tigen Objekte erstellen.<\/b><\/p>\n<p>Im Artikel Datenbanken erstellen mit dem SSMA haben wir eine kleine Beispieldatenbank mit dem SQL Server Management Studio auf Basis von LocalDB erstellt. Auf diese wollen wir nun mit dem Entity Framework zugreifen, um die Vorbereitung f&uuml;r den Zugriff per C# oder die Anzeige in mit WPF definierten Benutzeroberfl&auml;chen zu erledigen.<\/p>\n<h2>Entity Data Model anlegen<\/h2>\n<p>Als Erstes erstellen wir dazu das Entity Data Model auf Basis der Tabellen der Beispieldatenbank. Dazu legen Sie ein neues Projekt des Typs C#|Konsolenanwendung an und nennen es EF_Zugriff.<\/p>\n<p>W&auml;hlen Sie dazu im Objektmappen-Explorer auf dem Kontextmen&uuml; des Projekts den Eintrag Hinzuf&uuml;gen|Neues Element aus. Der Typ des gew&uuml;nschten neuen Objekts hei&szlig;t ADO.NET Entity Data Model, der Name soll BestellverwaltungModel lauten (siehe Bild 1).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_04\/pic_47_001.png\" alt=\"Hinzuf&uuml;gen eines neuen Entity Data Models\" width=\"649,326\" height=\"334,4786\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Hinzuf&uuml;gen eines neuen Entity Data Models<\/span><\/b><\/p>\n<p>Im nun erscheinenden Dialog Assistent f&uuml;r Entity Data Model w&auml;hlen Sie unter dem Schritt Modellinhalte ausw&auml;hlen den Eintrag EF Designer aus Datenbank aus, da wir ja bereits eine Datenbank vorbereitet haben (siehe Bild 2).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_04\/pic_47_002.png\" alt=\"Art des Modellinhalts\" width=\"424,6255\" height=\"220,9154\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Art des Modellinhalts<\/span><\/b><\/p>\n<p>Daraufhin erscheint der Dialog-Schritt W&auml;hlen Sie Ihre Datenverbindung aus. Hier klicken Sie auf Neue Verbindung&#8230; und w&auml;hlen im folgenden Dialog Datenquelle ausw&auml;hlen den Eintrag Microsoft SQL Server aus (siehe Bild 3).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_04\/pic_47_003.png\" alt=\"Auswahl der Datenquelle\" width=\"425\" height=\"287,5496\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Auswahl der Datenquelle<\/span><\/b><\/p>\n<p>Tragen Sie dort den Namen des Servers ein oder w&auml;hlen Sie ihn aus der Liste aus, soweit vorhanden. Wenn Sie, wie oben vorgeschlagen, LocalDB verwenden und eine einzige Instanz von LocalDB auf dem Rechner installiert haben, k&ouml;nnen Sie hier (localdb)\\SQLLocalDB eintragen, sonst geben Sie die Version mit an &#8211; also etwa (localdb)\\v11.0 wie in Bild 4. W&auml;hlen Sie dann unter Mit Datenbank verbinden die gew&uuml;nschte Datenbank aus, sofern diese schon von LocalDB verwaltet wird. Anderenfalls k&ouml;nnen Sie eine .mdf-Datei unter Datenbankdatei anh&auml;ngen angeben. Klicken Sie auf OK.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_04\/pic_47_004.png\" alt=\"Auswahl der Datenbank\" width=\"350\" height=\"454,9199\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Auswahl der Datenbank<\/span><\/b><\/p>\n<p>Damit kehren Sie zum Schritt W&auml;hlen Sie Ihre Datenverbindung aus und k&ouml;nnen dort mit einem Klick auf die Schaltfl&auml;che Weiter > zum n&auml;chsten Schritt wechseln.<\/p>\n<p>Der Assistent fragt Sie nun, ob Sie, falls Sie eine Datenbankdatei angegeben haben, diese in den Projektordner kopieren m&ouml;chten. Dies macht beispielsweise Sinn, wenn Sie diese Datei mit dem Projekt weitergeben m&ouml;chten.<\/p>\n<p>Im n&auml;chsten Schritt fragt der Assistent Sie unter dem Titel W&auml;hlen Sie Ihre Version, welche Version des Frameworks Sie verwenden m&ouml;chten. Wir w&auml;hlen den Wert Entity Framework 6.x aus.<\/p>\n<p>Im n&auml;chsten Schritt wird es nun interessant: Hier finden wir die Objekte der Datenbank vor, in diesem Fall die wie im Artikel Datenbanken erstellen mit dem SSMA angelegten Tabellen (siehe Bild 5). Um alle hier angegebenen Tabellen gleichzeitig zu markieren, klicken Sie einfach auf den Eintrag Tabellen. Unten finden Sie noch zwei Optionen, mit denen Sie die Erstellung der Klassen des Entity Frameworks steuern k&ouml;nnen. Die erste ist f&uuml;r uns nicht relevant, da wir den Tabellen des Datenmodells deutsche Bezeichnungen gegeben haben &#8211; bei englischen Bezeichnungen w&uuml;rde einem diese Option etwas Arbeit durch das Anh&auml;ngen\/Entfernen von s bei Singular\/Plural abnehmen (Customer\/Customers). Die Option Fremdschl&uuml;sselspalten in das Modell einbeziehen behalten wir hingegen bei. Au&szlig;erdem legen wir als Name des Namespaces f&uuml;r das Model den vorgegebenen Wert BestellverwaltungModel fest.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_04\/pic_47_005.png\" alt=\"Auswahl der zu verwendenden Datenbankobjekte\" width=\"499,3708\" height=\"452,4283\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Auswahl der zu verwendenden Datenbankobjekte<\/span><\/b><\/p>\n<p>Damit k&ouml;nnen Sie nun auf Fertig stellen klicken. Das Ergebnis finden Sie nach einer kurzen Zeit in Bild 6. Die Abbildung zeigt das Entity Data Model auf Basis der angegebenen Tabellen samt ihrer Verkn&uuml;pfungen beziehungsweise Fremdschl&uuml;sselfelder. Die Ansicht sieht etwas anders aus als das Datenmodell, das Sie etwa vom Beziehungsfenster von Access kennen. Hier werden die Beziehungspfeile nicht direkt mit den betroffenen  Feldern der verkn&uuml;pften Tabellen verbunden, sondern einfach an irgendeiner Stelle. Daf&uuml;r zeigen die einzelnen Entit&auml;ten jeweils die verkn&uuml;pften Elemente unten im Bereich Navigationseigenschaften an. Die Felder selbst werden nun Eigenschaften genannt.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_04\/pic_47_006.png\" alt=\"Entity Data Model der Bestellverwaltung\" width=\"700\" height=\"406,7194\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 6: Entity Data Model der Bestellverwaltung<\/span><\/b><\/p>\n<h2>Entit&auml;ten: Aus Plural mach Singular<\/h2>\n<p>An dieser Stelle sehen Sie, dass die Entit&auml;ten des Entity Data Models genauso hei&szlig;en wie die Tabellen, von denen sie abgeleitet wurden. Sch&ouml;n und gut &#8211; aber wenn wir sp&auml;ter im Code auf diese Entit&auml;ten zugreifen wollen, was letztlich Klassen sind, auf deren Basis sie Objekte erstellen, dann f&auml;llt eines auf: Ein Objekt etwa zur Abbildung eines Kunden soll wohl kaum beispielsweise Kunden hei&szlig;en, sondern Kunde, und Gleiches gilt dann auch f&uuml;r die Klassen (nur dass wir Objekte, also Instanzen von Klassen, nicht genau wie die Klassen benennen, sondern diese beispielsweise mit einem kleinen Anfangsbuchstaben versehen &#8211; also kunde oder bestellung).<\/p>\n<p>Nun sollten wir also daf&uuml;r sorgen, dass die Klassen nicht mehr Kunden oder Bestellungen hei&szlig;en, sondern Kunde oder Bestellung. Dazu benennen Sie gleich hier und jetzt die Bezeichnungen im Entity Data Model um, indem Sie die betroffene Klasse anklicken, nochmals auf den Namen im Titel klicken und diesen dann &auml;ndern. Aus den bisherigen Bezeichnungen wird dann Kategorie, Artikel, Bestellposition, Bestellung, Kunde, und Anrede (siehe Bild 7). Speichern Sie dann das Entity Data Model, damit die &Auml;nderungen auch auf die Klassen des Entity Data Models &uuml;bertragen werden, welche diese Bezeichnungen enthalten.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_04\/pic_47_017.png\" alt=\"Entity Data Model mit Singular-Namen f&uuml;r die Entit&auml;ten\" width=\"649,182\" height=\"352,9462\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 7: Entity Data Model mit Singular-Namen f&uuml;r die Entit&auml;ten<\/span><\/b><\/p>\n<h2>Mapping von Entit&auml;t zu Tabelle<\/h2>\n<p>Wenn Sie auf eine der Entit&auml;ten klicken, erscheint unterhalb im Bereich Zuordnungsdetails das Mapping, also die Angabe, welche Eigenschaft zu welchem Feld der zugrunde liegenden Tabelle geh&ouml;rt. Hier finden Sie auch gleich die Datentypen auf Datenbankseite und Objektseite vor (siehe Bild 8).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_04\/pic_47_007.png\" alt=\"Mapping der Eigenschaften der Klassen zu den Tabellenfeldern\" width=\"549,308\" height=\"281,794\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 8: Mapping der Eigenschaften der Klassen zu den Tabellenfeldern<\/span><\/b><\/p>\n<p>Um Informationen &uuml;ber die Umsetzung der Beziehungen zwischen den zugrunde liegenden Tabellen zu erhalten, klicken Sie auf die jeweilige Navigationseigenschaft. Wenn Sie etwa erfahren m&ouml;chten, welche Felder an der Beziehung zwischen den Entit&auml;ten Anrede und Kunde beteiligt sind, klicken Sie auf die Navigationseigenschaft Kunde der Entit&auml;t Anrede oder die Navigationseigenschaft Anrede der Entit&auml;t Kunde. Die beteiligten Eigenschaften beziehungsweise Navigationseigenschaften werden dann unterstrichen hervorgehoben (siehe Bild 9).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_04\/pic_47_009.png\" alt=\"Markierung der an einer Beziehung beteiligten Eigenschaften\" width=\"349,5596\" height=\"308,3339\" \/><\/p>\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\/55000047\/\">\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\/55000047?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\/55000047\/\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"b661a4519d\"\/>\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 zun&auml;chst, wie Sie die Verbindung zu einer Beispieldatenbank einrichten und dann die f&uuml;r den Zugriff per C# oder die Anzeige in WPF-Fenstern und -Steuerelementen n&ouml;tigen Objekte erstellen.<\/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,44000027,44000022],"tags":[],"yst_prominent_words":[],"class_list":["post-55000047","post","type-post","status-publish","format-standard","hentry","category-662016","category-66042016","category-Datenzugriffstechnik","category-Entity_Framework","category-Excel_programmieren","category-Von_Access_zu_NET"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000047","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=55000047"}],"version-history":[{"count":0,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000047\/revisions"}],"wp:attachment":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/media?parent=55000047"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/categories?post=55000047"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/tags?post=55000047"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/yst_prominent_words?post=55000047"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}