ventajas framework first example espaƱol code entity-framework edmx

entity-framework - first - entity framework ventajas



Asistente de actualizaciĆ³n que no responde (7)

Cada vez que tengo que actualizar mi emdx desde la base de datos, el asistente de actualización tarda una cantidad increíble de tiempo para hacerlo y no responde cuando llega al botón de finalizar (como finalizar la actualización).

Uso Visual Studio 2015 y LocalDb SQL Server 2014. Algunas personas sugirieron instalar el Service Pack 1 para solucionar el problema. He instalado el SP1 para LocalDb, pero no ha ayudado. Mi instalación de VS2015 también es bastante nueva.

Tengo la última versión de Entity Framework 6 (de nuget).


Remedio manual letárgico de MariaDB

  • Usando EF6, VisualStudio 2015 contra MariaDB 10.2.
  • Como indicó @Santhos, soplar un montón de tiempo para mí. Parece que VisualStudio tarda en analizar ese enorme archivo XML ( mi máquina de desarrollo solo tiene 8 gb de RAM ). No es broma, unos 15 minutos para actualizar.
  • Aprendí que "restablecer" manualmente un par de archivos, luego proceder a través de la actualización de la GUI me cuadró rápidamente. Estoy dentro y fuera con nuevos modelos brillantes ~ 1-2 minutos.

Pasos de actualización manual

  1. Reemplace el contenido de su archivo .edmx.diagram con el Diagrama de EDMX Boilerplate a continuación
  2. Reemplace el contenido de su archivo .edmx con el texto EDMX Runtime Boilerplate a continuación
  3. Regrese a VisualStudio, haga doble clic en su EDMX> haciendo clic con el botón derecho en la pantalla vacía> Actualizar modelos desde la base de datos

Diagrama de EDMX

<?xml version="1.0" encoding="utf-8"?> <edmx:Edmx Version="3.0" xmlns:edmx="http://schemas.microsoft.com/ado/2009/11/edmx"> <!-- EF Designer content (DO NOT EDIT MANUALLY BELOW HERE) --> <edmx:Designer xmlns="http://schemas.microsoft.com/ado/2009/11/edmx"> <!-- Diagram content (shape and connector positions) --> <edmx:Diagrams> <Diagram DiagramId="820459acb0f543cfaf7db8643f38c2d6" Name="Diagram1" ZoomLevel="85"> </Diagram> </edmx:Diagrams> </edmx:Designer> </edmx:Edmx>

EDMX Runtime Boilerplate

<?xml version="1.0" encoding="utf-8"?> <edmx:Edmx Version="3.0" xmlns:edmx="http://schemas.microsoft.com/ado/2009/11/edmx"> <!-- EF Runtime content --> <edmx:Runtime> <!-- SSDL content --> <edmx:StorageModels> <Schema Namespace="ShareDirectModel.Store" Provider="MySql.Data.MySqlClient" ProviderManifestToken="5.5" Alias="Self" xmlns:store="http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator" xmlns:customannotation="http://schemas.microsoft.com/ado/2013/11/edm/customannotation" xmlns="http://schemas.microsoft.com/ado/2009/11/edm/ssdl"> <EntityContainer Name="ShareDirectModelStoreContainer"> </EntityContainer> </Schema></edmx:StorageModels> <!-- CSDL content --> <edmx:ConceptualModels> <Schema Namespace="ShareDirectModel" Alias="Self" annotation:UseStrongSpatialTypes="false" xmlns:annotation="http://schemas.microsoft.com/ado/2009/02/edm/annotation" xmlns:customannotation="http://schemas.microsoft.com/ado/2013/11/edm/customannotation" xmlns="http://schemas.microsoft.com/ado/2009/11/edm"> <EntityContainer Name="ShareDirectContext" annotation:LazyLoadingEnabled="true"> </EntityContainer> </Schema> </edmx:ConceptualModels> <!-- C-S mapping content --> <edmx:Mappings> <Mapping Space="C-S" xmlns="http://schemas.microsoft.com/ado/2009/11/mapping/cs"> <EntityContainerMapping StorageEntityContainer="ShareDirectModelStoreContainer" CdmEntityContainer="ShareDirectContext"> </EntityContainerMapping> </Mapping> </edmx:Mappings> </edmx:Runtime> <!-- EF Designer content (DO NOT EDIT MANUALLY BELOW HERE) --> <Designer xmlns="http://schemas.microsoft.com/ado/2009/11/edmx"> <Connection> <DesignerInfoPropertySet> <DesignerProperty Name="MetadataArtifactProcessing" Value="EmbedInOutputAssembly" /> </DesignerInfoPropertySet> </Connection> <Options> <DesignerInfoPropertySet> <DesignerProperty Name="ValidateOnBuild" Value="true" /> <DesignerProperty Name="EnablePluralization" Value="true" /> <DesignerProperty Name="IncludeForeignKeysInModel" Value="true" /> <DesignerProperty Name="UseLegacyProvider" Value="false" /> <DesignerProperty Name="CodeGenerationStrategy" Value="None" /> <DesignerProperty Name="DDLGenerationTemplate" Value="$(VSEFTools)/DBGen/SSDLToMySQL.tt" /> </DesignerInfoPropertySet> </Options> <!-- Diagram content (shape and connector positions) --> <Diagrams></Diagrams> </Designer> </edmx:Edmx>


Cambiar el nivel de compatibilidad de SQL Server o trace-flag 9481 no es una opción para mí.

Le di una oportunidad al EntityFramework Reverse POCO Generator .

https://visualstudiogallery.msdn.microsoft.com/ee4fcff9-0c4c-4179-afd9-7a2fb90f5838

Es una plantilla T4 genérica configurable y funciona muy bien hasta ahora.

Incluso tiene una opción para el indicador de seguimiento mencionado

IncludeQueryTraceOn9481Flag = false; // Si SqlServer 2014 aparece congelado / demora mucho tiempo cuando se guarda este archivo, intente configurarlo en verdadero (también necesitará privilegios elevados).

Irónicamente, funciona rápido, incluso si la bandera está apagada :) Parece que están utilizando diferentes consultas de metadatos en comparación con el Diseñador VS EF.


Ejecutar lo siguiente en el DB funcionó para mí:

ALTER DATABASE SCOPED CONFIGURATION SET LEGACY_CARDINALITY_ESTIMATION=ON

Luego, después de la actualización, configúrelo usando:

ALTER DATABASE SCOPED CONFIGURATION SET LEGACY_CARDINALITY_ESTIMATION=OFF

Esto es por github.com/aspnet/EntityFramework6/issues/4 más en el repositorio de EF6 en Github.

Debe notarse que lo siguiente también se informa en ese hilo para que funcione, aunque no lo he probado porque el anterior funcionó muy bien para mí:

UPDATE STATISTICS sys.syscolpars UPDATE STATISTICS sys.sysschobjs UPDATE STATISTICS sys.syssingleobjrefs UPDATE STATISTICS sys.sysiscols

También lo enviaron al equipo de SQL Server y abrieron este problema en Microsoft Connect.


Establecer el nivel de compatibilidad de la base de datos a 110 me ha funcionado.

Para verificar el nivel de compatibilidad, ejecute este script:

select compatibility_level from sys.databases where name = ''<YOUR_DB_NAME>''

Para establecer el nivel de compatibilidad, use este script:

alter database <YOUR_DB_NAME> set compatibility_level = 110


Hoy, mis compañeros de trabajo y yo dejamos el asistente solo y lo dejamos actualizar durante ~ 10 minutos. Si bien tomó bastante tiempo, se completó. Esta es la mejor solución para nosotros (por ahora), ya que no podemos establecer el nivel de compatibilidad de nuestra base de datos sin los permisos adecuados.


Verifique su web.config para la instancia sql local. no a distancia


Todavía tenía que hacer esto con Microsoft SQL Server 2014 (SP2-GDR) (KB4019093) - 12.0.5207.0 (X64) Jul 3 2017 02:25:44 Copyright (c) Microsoft Corporation Standard Edition (64-bit) on Windows NT 6.3 <X64> (Build 9600: ) (Hypervisor) :) Microsoft SQL Server 2014 (SP2-GDR) (KB4019093) - 12.0.5207.0 (X64) Jul 3 2017 02:25:44 Copyright (c) Microsoft Corporation Standard Edition (64-bit) on Windows NT 6.3 <X64> (Build 9600: ) (Hypervisor) utilizando Entity Framework 6.2.0. ¿Cómo en el mundo esto aún no ha sido resuelto?