{"id":55000140,"date":"2018-08-01T00:00:00","date_gmt":"2020-03-27T19:33:09","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=140"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Schnellstart_mit_Datenbank","status":"publish","type":"post","link":"https:\/\/vbentwickler.de\/Schnellstart_mit_Datenbank\/","title":{"rendered":"Schnellstart mit Datenbank"},"content":{"rendered":"<p><b>In einigen Artikeln haben wir ausf&uuml;hrlich und Schritt f&uuml;r Schritt erkl&auml;rt, wie Sie eine Webanwendung mit Datenbankanbindung anlegen: Sie erstellen die Klassen f&uuml;r die einzelnen Entit&auml;ten, f&uuml;gen eine Datenbankkontextklasse hinzu, legen ein paar andere notwendige Elemente an und erstellen dann mit dem Ger&uuml;stbau-Assistenten die gew&uuml;nschten Seiten an, die Sie dann nach eigenen Vorstellungen erweitern k&ouml;nnen. Einige dieser Schritte k&ouml;nnen Sie sich, wenn Sie die Funktion verstanden haben, auch sparen &#8211; nach dem Anlegen der Klassen k&ouml;nnen Sie n&auml;mlich einige Schritte auf einen Schlag erledigen. Wie das gelingt, zeigt der vorliegende Beitrag.<\/b><\/p>\n<p>F&uuml;r die Beispiele dieses Artikels haben wir ein neues Projekt auf Basis der Vorlage Visual <b>C#|Web|ASP.NET Core-Webanwendung <\/b>f&uuml;r <b>ASP.NET Core 2.1 <\/b>mit der Projektvorlage <b>Webanwendung <\/b>angelegt &#8211; ohne Hinzuf&uuml;gen einer Authentifizierung. Einem neuen Verzeichnis namens <b>Models <\/b>haben wir eine neue Klasse namens <b>Article.cs <\/b>hinzugef&uuml;gt, welche die Artikel-Entit&auml;ten aufnehmen soll:<\/p>\n<pre>public class Article {\r\n     public int ID { get; set; }\r\n     public string Name { get; set; }\r\n     public decimal Price { get; set; }\r\n     public int CategoryID { get; set; }\r\n     public Category Category { get; set; }\r\n}<\/pre>\n<p>Eine weitere Klasse namens <b>Category <\/b>&uuml;bernimmt die Kategorien:<\/p>\n<pre>public class Category {\r\n     public int ID { get; set; }\r\n     public string Name { get; set; }\r\n     public virtual ICollection&lt;Article&gt; Article { get; set; }\r\n}<\/pre>\n<p>Die beiden Klassen sind &uuml;ber die Navigationseigenschaft <b>Category <\/b>beziehungsweise die <b>ICollection<\/b>-Auflistung <b>Article <\/b>miteinander verkn&uuml;pft. Dann f&uuml;hren wir ein paar Schritte, die wir in anderen Artikeln manuell durchgef&uuml;hrt haben, direkt &uuml;ber den Ger&uuml;st-Generator aus. Dazu legen Sie ein neues Verzeichnis namens <b>Articles <\/b>unterhalb des Verzeichnisses <b>Pages <\/b>an. W&auml;hlen Sie aus dem Kontextmen&uuml; des neuen Eintrags den Befehl <b>Hinzuf&uuml;gen|Neues Ger&uuml;stelement&#8230; <\/b>aus. Im nun erscheinenden Dialog <b>Ger&uuml;st hinzuf&uuml;gen <\/b>aktivieren Sie die Option <b>Razor-Seiten mithilfe des Entity Frameworks (CRUD) <\/b>und klicken auf <b>Hinzuf&uuml;gen<\/b>. Da wir noch nicht, wie in anderen Beispielen, manuell eine Datenkontextklasse erstellt haben, klicken wir im Dialog aus Bild 1 auf die Schaltfl&auml;che mit dem <b>Plus<\/b>-Symbol neben der Eigenschaft <b>Datenkontextklasse<\/b>. Im nun erscheinenden Input-Fenster geben wir den Namen ein &#8211; beispielsweise wie hier vorgeschlagen <b>Schnellstart.Models.SchnellstartContext<\/b>. Diesen neuen Eintrag m&uuml;ssen Sie dann noch f&uuml;r die Eigenschaft Datenkontextklasse ausw&auml;hlen und den Erstellungsvorgang mit einem Klick auf die Schaltfl&auml;che <b>Hinzuf&uuml;gen <\/b>starten. Danach arbeitet Visual Studio f&uuml;r einige Sekunden an der Erstellung der notwendigen sowie an der Anpassung vorhandener Dateien.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_04\/pic_140_001.png\" alt=\"Anlegen einer neuen Datenkontextklasse\" width=\"599,593\" height=\"340,84\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Anlegen einer neuen Datenkontextklasse<\/span><\/b><\/p>\n<h2>Was ist geschehen<\/h2>\n<p>Bevor wir die Anwendung einfach einmal starten, schauen wir uns die Ver&auml;nderungen in den Projektdateien an. Als Erstes f&auml;llt uns nat&uuml;rlich auf, dass im Verzeichnis <b>Pages\/Articles <\/b>einige neue Dateien wie <b>Create.cshtml <\/b>und so weiter erscheinen &#8211; aber die waren uns ja schon von fr&uuml;heren Artikeln bekannt. Vorher haben wir aber noch einige &Auml;nderungen manuell durchgef&uuml;hrt. Diese wurden nun automatisch hinzugef&uuml;gt, sofern noch nicht vorhanden. Schauen wir uns an, was noch geschehen ist. Da w&auml;re zun&auml;chst die von uns gew&uuml;nscht Datenkontextklasse. Diese wurde in einem neuen Verzeichnis namens <b>Data <\/b>angelegt, wurde aber dem Namespace <b>Schnellstart.Models <\/b>zugeordnet. Die Klasse enth&auml;lt die noch leere Konstruktormethode <b>SchnellstartContext <\/b>sowie das <b>DbSet <\/b>namens <b>Article<\/b> (siehe Bild 2). Die Frage, die sich hier stellt, ist: Warum finden wir hier nur ein <b>DbSet <\/b>auf Basis der Klasse <b>Article <\/b>vor, aber keine auf Basis der Klasse <b>Category<\/b> Der Grund ist, dass die Klasse <b>Article <\/b>mit der Navigationseigenschaft <b>Category <\/b>auf die Klasse <b>Category <\/b>verweist. Der Ordnung halber k&ouml;nnen Sie die Klasse <b>Category <\/b>aber dennoch aufnehmen. Sp&auml;testens, wenn Sie eine Klasse hinzuf&uuml;gen, die nicht mit <b>Article <\/b>oder einer anderen bereits als <b>DbSet <\/b>registrierten Klasse verkn&uuml;pft ist, m&uuml;ssen Sie daf&uuml;r ein eigenes <b>DbSet <\/b>anlegen. Au&szlig;erdem wollen wir den Namen des <b>DbSet <\/b>noch auf <b>Articles <\/b>&auml;ndern. Leider m&uuml;ssen Sie danach auch noch die Stellen, an denen die L&ouml;sung auf das DbSet <b>Article <\/b>zugreift, in <b>Articles <\/b>umbenennen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_04\/pic_140_002.png\" alt=\"Die neue Datenkontextklasse\" width=\"549,6265\" height=\"292,9098\" \/><\/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\/55000140\/\">\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\/55000140?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\/55000140\/\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"123b777de9\"\/>\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 einigen Artikeln haben wir ausf&uuml;hrlich und Schritt f&uuml;r Schritt erkl&auml;rt, wie Sie eine Webanwendung mit Datenbankanbindung anlegen: Sie erstellen die Klassen f&uuml;r die einzelnen Entit&auml;ten, f&uuml;gen eine Datenbankkontextklasse hinzu, legen ein paar andere notwendige Elemente an und erstellen dann mit dem Ger&uuml;stbau-Assistenten die gew&uuml;nschten Seiten an, die Sie dann nach eigenen Vorstellungen erweitern k&ouml;nnen. Einige dieser Schritte k&ouml;nnen Sie sich, wenn Sie die Funktion verstanden haben, auch sparen &#8211; nach dem Anlegen der Klassen k&ouml;nnen Sie n&auml;mlich einige Schritte auf einen Schlag erledigen. Wie das gelingt, zeigt der vorliegende Beitrag.<\/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":[662018,66042018,44000018],"tags":[],"yst_prominent_words":[],"class_list":["post-55000140","post","type-post","status-publish","format-standard","hentry","category-662018","category-66042018","category-ASPNET_Core"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000140","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=55000140"}],"version-history":[{"count":0,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000140\/revisions"}],"wp:attachment":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/media?parent=55000140"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/categories?post=55000140"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/tags?post=55000140"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/yst_prominent_words?post=55000140"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}