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
- Reemplace el contenido de su archivo
.edmx.diagram
con el Diagrama de EDMX Boilerplate a continuación - Reemplace el contenido de su archivo
.edmx
con el texto EDMX Runtime Boilerplate a continuación - 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?