0

J'ai créé une bibliothèque de classes portable ciblant .NETPortable, v4.0Est-ce que je ne peux pas utiliser l'API courante Code First avec .NET Portable?

Dans la classe suivante

public class AddressConfiguration : EntityTypeConfiguration<Address> 
    { 
     public AddressConfiguration() 
     { 
      ToTable("Addresses"); 
      HasKey(c => c.Id); 
     } 
    } 

à la ligne HasKey(c => c.Id); plaintes studio visuel à propos de

The type 'Expression<>' is defined in an assembly that is not referenced. 
You must add a reference to assembly 'System.Core, Version=4.0.0.0, Culture=neutral, 
PublicKeyToken=b77a5c561934e089'. 

Qu'est-ce que je manque ici?

Le App.config est

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <configSections> 
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> 
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
    </configSections> 
    <entityFramework> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" /> 
    <providers> 
     <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> 
    </providers> 
    </entityFramework> 
</configuration> 

tandis que le packages.config est

<?xml version="1.0" encoding="utf-8"?> 
<packages> 
    <package id="EntityFramework" version="6.1.3" targetFramework="portable40-net45+sl5" /> 
</packages> 
+0

Quelle est l'erreur? – Nikolaus

+0

@Nikolaus Que voulez-vous dire? Je l'ai inclus dans la question – OrElse

+0

Quelle version de VS utilisez-vous? – Nikolaus

Répondre

1

L'erreur est un peu trompeur ici. Cependant,

Adding package 'EntityFramework.6.1.3' to folder '\\psf\home\Documents\Visual Studio 2015\Projects\Solution2\packages' 
Added package 'EntityFramework.6.1.3' to folder '\\psf\home\Documents\Visual Studio 2015\Projects\Solution2\packages' 
Added package 'EntityFramework.6.1.3' to 'packages.config' 
Executing script file '\\psf\home\Documents\Visual Studio 2015\Projects\Solution2\packages\EntityFramework.6.1.3\tools\init.ps1' 
Executing script file '\\psf\home\Documents\Visual Studio 2015\Projects\Solution2\packages\EntityFramework.6.1.3\tools\install.ps1' 

les deux scripts ci-dessus se modifier votre fichier proj et app.config ainsi que package.config fichiers,: Lorsque vous venez d'installer EF via NuGet:

Install-Package EntityFramework

NuGet fera rapport comme installé la DLL réelle ne sera pas référencée.

Si vous vérifiez le contenu du packages\EntityFramework.6.1.3\lib, vous trouverez deux dossiers avec des fichiers binaires (net40 et net45).

En fait, les profils portatifs ne sont pas pris en charge par l'EF. Vous pouvez envisager d'utiliser EF7.

Vous avez probablement référencé manuellement l'une des DLL .NET40 ou .NET45. Et maintenant vous êtes confronté au problème de non-concordance API ici.

Une autre option consiste à repenser l'architecture de votre application. Vous pouvez garder la logique métier dans le PCL, abstraire le travail avec un stockage et injecter l'abstraction dans la classe de logique métier.

La mise en œuvre réelle de cette abstraction mentionnée ci-dessus, vous devez conserver dans le projet .NET 4.5.

Sans connaître les détails de votre projet, c'est tout ce que je peux vous suggérer.