Intentando instalar EF Core con la biblioteca de clases portátil .Net 4.6.1

entity-framework entity-framework-core portable-class-library

Pregunta

Esta es la primera vez que experimento con las bibliotecas de clase EF Core, ASP Net Core y Portable Class con VS2015. Es justo decir que estoy frustrado.

Quiero crear una biblioteca donde pueda instalar EntityFramework.Core. Esta biblioteca debe usarse en una aplicación WPF y una aplicación web ASP NET Core, ignorando por ahora cualquier buen concepto de aplicación en capas. Mi pensamiento era crear una biblioteca portátil de clases.

Usando la plantilla de proyecto donde me dirijo .NET 4.6 y ASP Net Core ...

Objetivos

Obtengo un proyecto con una clase y un archivo project.json de la siguiente manera:

{
    "supports": {
        "net46.app": {},
        "dnxcore50.app": {}
    },
    "dependencies": {
        "Microsoft.NETCore": "5.0.0",
        "Microsoft.NETCore.Portable.Compatibility": "1.0.0"
    },
    "frameworks": {
        "dotnet": {
            "imports": "portable-net452"
        }
    }
}

Ahora cuando instalo el paquete EntityFramework.Core de nuget ...

Instala EF Core Nuget

... me sale el siguiente resultado:

Restoring packages for 'Acme.PCLEFClassLib'.
Restoring packages for K:\TFS\TestApps\Projects\DotNetCore\Acme.PCL1\Acme.PCL1\project.json...
Detected package downgrade: System.Reflection from 4.1.0-beta-23225 to 4.0.10 
 Acme.PCLEFClassLib (>= 1.0.0) -> EntityFramework.Core (>= 7.0.0-rc1-final) -> Microsoft.Extensions.DependencyInjection.Abstractions (>= 1.0.0-rc1-final) -> System.Reflection (>= 4.1.0-beta-23225) 
 Acme.PCLEFClassLib (>= 1.0.0) -> EntityFramework.Core (>= 7.0.0-rc1-final) -> System.Reflection (>= 4.0.10)
Detected package downgrade: System.Reflection from 4.1.0-beta-23225 to 4.0.10 
 Acme.PCLEFClassLib (>= 1.0.0) -> EntityFramework.Core (>= 7.0.0-rc1-final) -> Microsoft.Extensions.Logging.Abstractions (>= 1.0.0-rc1-final) -> System.Reflection (>= 4.1.0-beta-23225) 
 Acme.PCLEFClassLib (>= 1.0.0) -> EntityFramework.Core (>= 7.0.0-rc1-final) -> System.Reflection (>= 4.0.10)
Version conflict detected for System.Collections. 
 Acme.PCLEFClassLib (>= 1.0.0) -> EntityFramework.Core (>= 7.0.0-rc1-final) -> System.Collections (>= 4.0.11-beta-23516) 
 Acme.PCLEFClassLib (>= 1.0.0) -> Microsoft.NETCore.Portable.Compatibility (>= 1.0.0) -> Microsoft.NETCore.Runtime (>= 1.0.0) -> Microsoft.NETCore.Runtime.CoreCLR-x86 (>= 1.0.0) -> System.Collections (= 4.0.10).
EntityFramework.Core 7.0.0-rc1-final is not compatible with .NETPlatform,Version=v5.0.
Some packages are not compatible with .NETPlatform,Version=v5.0.
Ix-Async 1.2.5 is not compatible with DNXCore,Version=v5.0.
Remotion.Linq 2.0.1 is not compatible with DNXCore,Version=v5.0.
Some packages are not compatible with DNXCore,Version=v5.0.
Ix-Async 1.2.5 is not compatible with DNXCore,Version=v5.0 (win7-x86).
Remotion.Linq 2.0.1 is not compatible with DNXCore,Version=v5.0 (win7-x86).
Some packages are not compatible with DNXCore,Version=v5.0 (win7-x86).
Ix-Async 1.2.5 is not compatible with DNXCore,Version=v5.0 (win7-x64).
Remotion.Linq 2.0.1 is not compatible with DNXCore,Version=v5.0 (win7-x64).
Some packages are not compatible with DNXCore,Version=v5.0 (win7-x64).
Package restore failed for 'Acme.PCLEFClassLib'.
Package restore failed. Rolling back package changes for 'Acme.PCLEFClassLib'.
========== Finished ==========

¿Es realmente posible instalar EF Core en una biblioteca de clases portátil? Si es así, ¿qué debo hacer con el proyecto?

Simplemente siento que estoy dando vueltas en círculos buscando soluciones en línea.

ACTUALIZACIÓN 1

Intenté instalar EntityFramework.MicrosoftSqlServer en mi PCL.

Dado que EntityFramework.MicrosoftSqlServer se instala al crear un proyecto estándar de ASP Net Core, que utiliza el marco dnxcore50. Como es que si hago algo similar en el PCL, se queja de que:

EntityFramework.MicrosoftSqlServer 7.0.0-rc1-final is not compatible with .NETPlatform,Version=v5.0.

Si ese es el caso, entonces, ¿cómo se instala en un proyecto ASP NET Core?

ACTUALIZACIÓN 2

Creé una nueva orientación PCL .NET 4.5.1. Luego instalé EntityFramework.MicrosoftSqlServer 7.0.0-rc1-final en eso a través de Nuget, y no instala ningún problema. Aunque no puedo repetir esto ahora. Acabo de crear una solución independiente con un proyecto de biblioteca PCL orientado a ASP NET Core y .NET 4.5.1. Esto produce lo siguiente ahora:

Attempting to gather dependency information for package 'EntityFramework.MicrosoftSqlServer.7.0.0-rc1-final' with respect to project 'AnotherPCLEFFUP', targeting '.NETPortable,Version=v4.5,Profile=Profile75'
Attempting to resolve dependencies for package 'EntityFramework.MicrosoftSqlServer.7.0.0-rc1-final' with DependencyBehavior 'Lowest'
Resolving actions to install package 'EntityFramework.MicrosoftSqlServer.7.0.0-rc1-final'
Resolved actions to install package 'EntityFramework.MicrosoftSqlServer.7.0.0-rc1-final'
Install failed. Rolling back...
Package 'EntityFramework.MicrosoftSqlServer.7.0.0-rc1-final' does not exist in project 'AnotherPCLEFFUP'
Package 'EntityFramework.MicrosoftSqlServer.7.0.0-rc1-final' does not exist in folder 'K:\TFS\TestApps\Projects\DotNetCore\AnotherPCLEFFUP\packages'
Invalid portable frameworks.

Lo mismo sucede al instalar EntityFramework.Core.7.0.0-rc1-final.

Es justo decirlo, esto es completamente frustrante. Tal vez estoy ladrando el árbol equivocado o simplemente ladrando enojado hoy.

Respuesta popular

No sé cómo funcionará esto para sus necesidades de Clase portátil, pero para .NET regular (4.6 o etc), descubrí lo siguiente. (ver despotricar abajo)

Así que no sé si esto es 'kosher' o no, pero esta fuente funciona en este momento:

Agregar fuente de paquete nuget (Opciones - Fuentes de paquete - Agregar (más)

Si está instalando para SqlServer, simplemente instale esto:

Microsoft.EntityFrameworkCore.SqlServer

O elija otra dependencia de nivel superior que recogerá todas las demás necesarias.

* [Begin-rant] Eso fue solo revisando las discusiones de github de EF. Es totalmente inexcusable que no tengan una descripción práctica que explique qué hacer en este momento. Deben usar la versión "RC" 1, con todos sus errores, y con su diseño radicalmente diferente del que están trabajando ahora, y que no se ha actualizado durante más de 5 meses (y esto es con el 'pre -¡free la marca 'marcada!), enteramente de nuget.

Permítanme agregar: Me encanta todo lo que hacen estos muchachos, me encantan las novedades, muchas cosas realmente buenas. Pero no deberíamos dejarlo colgado durante medio año con un lanzamiento supuestamente y todavía marcado como "RC" cuando está lleno de errores que ya se han corregido en la versión rc2 radicalmente rediseñada, que no han publicado. [/ final-rant] *



Related

Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow