{"id":1224,"date":"2021-05-19T11:55:54","date_gmt":"2021-05-19T11:55:54","guid":{"rendered":"https:\/\/www.mainmind.com\/blog\/?p=1224"},"modified":"2021-05-19T12:31:31","modified_gmt":"2021-05-19T12:31:31","slug":"ef6-vs-ef-core","status":"publish","type":"post","link":"https:\/\/www.mainmind.com\/blog\/ef6-vs-ef-core\/","title":{"rendered":"EF6 vs. EF Core: modelo de datos"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Cuando hablamos de <a href=\"https:\/\/github.com\/dotnet\/ef6\" data-type=\"URL\" data-id=\"https:\/\/github.com\/dotnet\/ef6\" target=\"_blank\" rel=\"noreferrer noopener\">Entity Famework 6<\/a> \u00abcl\u00e1sico\u00bb debemos tener en cuenta que su versi\u00f3n 1.0 apareci\u00f3 en 2008 y la <a rel=\"noreferrer noopener\" href=\"https:\/\/github.com\/dotnet\/ef6\/releases\/tag\/v6.4.4\" data-type=\"URL\" data-id=\"https:\/\/github.com\/dotnet\/ef6\/releases\/tag\/v6.4.4\" target=\"_blank\">\u00faltima versi\u00f3n corresponde con la 6.4.4<\/a> lanzada el 15 de mayo de 2020. Todo los ORM (Object-Relational mapping), como tambi\u00e9n lo son <a rel=\"noreferrer noopener\" href=\"https:\/\/nhibernate.info\/\" target=\"_blank\">NHibernate<\/a> \u00f3 <a rel=\"noreferrer noopener\" href=\"https:\/\/github.com\/DapperLib\/Dapper\" target=\"_blank\">Dapper<\/a>, facilitan una capa intermedia entre las bases de datos relacionales y el modelo de objetos de nuestra aplicaci\u00f3n.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dentro de la hoja de <a rel=\"noreferrer noopener\" href=\"https:\/\/www.mainmind.com\/blog\/net-5-un-framework-para-todo\/\" data-type=\"URL\" data-id=\"https:\/\/www.mainmind.com\/blog\/net-5-un-framework-para-todo\/\" target=\"_blank\">ruta de Microsoft para unificar tecnolog\u00eda .NET<\/a> tambien afecta a este ORM, la nueva versi\u00f3n <a rel=\"noreferrer noopener\" href=\"https:\/\/github.com\/dotnet\/efcore\" data-type=\"URL\" data-id=\"https:\/\/github.com\/dotnet\/efcore\" target=\"_blank\">EF Core<\/a> es una versi\u00f3n m\u00e1s ligera, extensible, modular y multiplataforma aunque<a rel=\"noreferrer noopener\" href=\"https:\/\/docs.microsoft.com\/es-es\/ef\/efcore-and-ef6\/\" data-type=\"URL\" data-id=\"https:\/\/docs.microsoft.com\/es-es\/ef\/efcore-and-ef6\/\" target=\"_blank\"> algunas caracter\u00edsticas previas todav\u00eda est\u00e1n pendientes<\/a> de valorar su integraci\u00f3n.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p class=\"wp-block-paragraph\">Una de las caracter\u00edsticas, que si pod\u00edamos utilizar previamente, es la <a href=\"\/blog\/actualizar-modelo-edmx-con-los-cambios-de-la-base-de-datos\/\" data-type=\"URL\" data-id=\"\/blog\/actualizar-modelo-edmx-con-los-cambios-de-la-base-de-datos\/\" target=\"_blank\" rel=\"noreferrer noopener\">visualizaci\u00f3n y edici\u00f3n gr\u00e1fica del modelo de datos mediante EDMX (XML)<\/a>, funci\u00f3n que no est\u00e1 disponible a fecha de hoy. Si intentamos a\u00f1adir un modelo \u00abcl\u00e1sico\u00bb en un proyecto Framework 5:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"802\" height=\"443\" src=\"https:\/\/www.mainmind.com\/blog\/wp-content\/uploads\/2021\/EntityFramework\/DataModels_error.jpg\" alt=\"\" class=\"wp-image-1227\" srcset=\"https:\/\/www.mainmind.com\/blog\/wp-content\/uploads\/2021\/EntityFramework\/DataModels_error.jpg 802w, https:\/\/www.mainmind.com\/blog\/wp-content\/uploads\/2021\/EntityFramework\/DataModels_error-300x166.jpg 300w, https:\/\/www.mainmind.com\/blog\/wp-content\/uploads\/2021\/EntityFramework\/DataModels_error-768x424.jpg 768w\" sizes=\"auto, (max-width: 802px) 100vw, 802px\" \/><figcaption>\u00abThe Project&#8217;s target framework does not contain Entity Framework runtime assemblies\u00bb<\/figcaption><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Llegados a este punto, podemos cambiar el Framework del proyecto por el 4.8 y\/o a\u00f1adir la referencia al <a rel=\"noreferrer noopener\" href=\"https:\/\/www.nuget.org\/packages\/EntityFramework\/6.4.4?_src=template\" data-type=\"URL\" data-id=\"https:\/\/www.nuget.org\/packages\/EntityFramework\/6.4.4?_src=template\" target=\"_blank\">EntityFramework 6.4.4<\/a> completa. Si queremos empezar a trabajar con las versiones Core, por ahora, debemos hacerlo desde la l\u00ednea de comandos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En este ejemplo partimos de un dise\u00f1o ya existente de base de datos, a partir del cual generamos las clases correspondientes con el comando <a rel=\"noreferrer noopener\" href=\"https:\/\/docs.microsoft.com\/es-es\/ef\/core\/cli\/powershell\" data-type=\"URL\" data-id=\"https:\/\/docs.microsoft.com\/es-es\/ef\/core\/cli\/powershell\" target=\"_blank\">Scaffold-DbContext<\/a>, deberemos tener instalado Microsoft.EntityFrameworkCore.Tools,  para una base de datos local:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nScaffold-DbContext &#039;Server=.\\SQLDEV;Database=MiBBDD;Trusted_Connection=True;&#039; Microsoft.EntityFrameworkCore.SqlServer -OutputDir &#039;Models&#039; -Project &#039;MiProyecto.Shared&#039; -Force\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">O a un servidor SQL Azure:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nScaffold-DbContext &#039;Server=tcp:miServidorSQLazure.database.windows.net,1433; Initial Catalog=MiBBDD;Persist Security Info=False; User ID=usuario;Password=Contrase\u00f1a; MultipleActiveResultSets=False; Encrypt=True; TrustServerCertificate=False; Connection Timeout=30;&#039; Microsoft.EntityFrameworkCore.SqlServer -OutputDir &#039;Models&#039; -context &#039;Entidad&#039; -Project &#039;MiProyecto.Shared&#039; -Force\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Si tu cadena de conexi\u00f3n contiene caracteres especial, por ejemplo \u00ab$\u00bb utiliza comillas simples en lugar de dobles para evitar problemas. El modificador \u00ab-Force\u00bb eliminar\u00e1 los archivos si estaban creados previamente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si todo ha ido correctamente, en el directorio de salida indicado \u00abModels\u00bb se habr\u00e1n generado  las clases correspondientes a nuestro modelo de base de datos.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Cuando hablamos de Entity Famework 6 \u00abcl\u00e1sico\u00bb debemos tener en cuenta que su versi\u00f3n 1.0 apareci\u00f3 en 2008 y la \u00faltima versi\u00f3n corresponde con la 6.4.4 lanzada el 15 de mayo de 2020. Todo los ORM (Object-Relational mapping), como tambi\u00e9n lo son NHibernate \u00f3 Dapper, facilitan una capa intermedia entre las bases de datos relacionales [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1228,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[15],"tags":[439,760,759,438,724,761,762],"class_list":["post-1224","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-visual-studio","tag-edmx","tag-ef-core","tag-ef6","tag-entity-data-model","tag-entity-framework","tag-orm","tag-scaffold-dbcontext"],"_links":{"self":[{"href":"https:\/\/www.mainmind.com\/blog\/wp-json\/wp\/v2\/posts\/1224","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mainmind.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.mainmind.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.mainmind.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mainmind.com\/blog\/wp-json\/wp\/v2\/comments?post=1224"}],"version-history":[{"count":0,"href":"https:\/\/www.mainmind.com\/blog\/wp-json\/wp\/v2\/posts\/1224\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mainmind.com\/blog\/wp-json\/wp\/v2\/media\/1228"}],"wp:attachment":[{"href":"https:\/\/www.mainmind.com\/blog\/wp-json\/wp\/v2\/media?parent=1224"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mainmind.com\/blog\/wp-json\/wp\/v2\/categories?post=1224"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mainmind.com\/blog\/wp-json\/wp\/v2\/tags?post=1224"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}