2017-06-13 1 views
0

J'ai l'application Web ASP.NET MVC qui utilise Entity Framework et Compact DB - "db.sdf" ou "db.mdf" fichier.Azure 1 heure Web App try - SQL Compact db

Cela fonctionne chez localhost. Mais je souhaite le publier sur Azure en tant qu'application Web d'essai d'une heure.

J'ai eu cette erreur:

The Entity Framework provider type 'System.Data.Entity.SqlServerCompact.SqlCeProviderServices, EntityFramework.SqlServerCompact' registered in the application config file for the ADO.NET provider with invariant name 'System.Data.SqlServerCe.4.0' could not be loaded. Make sure that the assembly-qualified name is used and that the assembly is available to the running application.

Que se passe-t-il? J'ai installé les paquets:

EF.SqlServer 
EF.SqlServerCompact 
System.Data.SqlServerCe 

Et le web.config regarde:

<configSections> 
    <section name="entityFramework" 
      type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, 
     EntityFramework, Version=6.0.0.0, Culture=neutral, 
     PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
</configSections> 

<connectionStrings> 
    <add name="DefaultConnection" connectionString="Data 
    Source=|DataDirectory|db.sdf" 
    providerName="System.Data.SqlServerCe.4.0" /> 
</connectionStrings> 

<entityFramework> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlCeConnectionFactory, EntityFramework"> 
     <parameters> 
      <parameter value="System.Data.SqlServerCe.4.0" /> 
     </parameters> 
    </defaultConnectionFactory> 
    <providers> 
     <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> 
     <provider invariantName="System.Data.SqlServerCe.4.0" type="System.Data.Entity.SqlServerCompact.SqlCeProviderServices, EntityFramework.SqlServerCompact" /> 
    </providers> 
</entityFramework> 

<system.data> 
    <DbProviderFactories> 
     <remove invariant="System.Data.SqlServerCe.4.0" /> 
     <add name="Microsoft SQL Server Compact Data Provider 4.0" 
      invariant="System.Data.SqlServerCe.4.0" 
      description=".NET Framework Data Provider for Microsoft SQL Server Compact" 
      type="System.Data.SqlServerCe.SqlCeProviderFactory, 
       System.Data.SqlServerCe, Version=4.0.0.0, Culture=neutral, 
      PublicKeyToken=89845dcd8080cc91" /> 
    </DbProviderFactories> 
</system.data> 
+0

"* Mais je souhaite le publier sur Azure en tant qu'application Web d'une heure *" - je ne suis pas sûr de ce que cela signifie. –

+0

Peut-être que vous avez besoin de faire le fichier "Copy To Local" - pour ce faire, ouvrez les références, cliquez sur SqlServerCe.4.0 et dans la fenêtre de propriétés choisissez Copier en local. Cela garantira que le fichier fait partie du package de déploiement. –

Répondre

0

Voulez-vous vérifier si la base de données SQL Compact pourrait fonctionner sur Azure Web App? Je viens de le tester sur mon application Web. Cela peut fonctionner correctement. Vous pouvez l'utiliser pour l'environnement de développement. Pour l'environnement de production, nous vous suggérons Azure SQL Database. Pour utiliser SQL Compact dans l'application .NET, nous devons installer les paquets suivants à partir de NuGet. Ensuite, 2 assemblages .NET et les assemblages multi-natifs suivants seront référencés par votre application.

enter image description here

enter image description here

Pour votre question, s'il vous plaît vérifier si la copie locale propriété est définie sur 'true' pour les 2 ensembles .NET.

enter image description here

Avant d'utiliser SQL Compact, vous devez configurer la chaîne de connexion dans web.config comme suit.

<add name="DefaultConnection" connectionString="Data Source=|DataDirectory|\myDB.mdf" providerName="System.Data.SqlServerCe.4.0"/> 

Ensuite, vous pouvez utiliser SQL Compact by EF. Le code ci-dessous est pour votre référence.

public class MyDataContext : DbContext 
{ 
    public MyDataContext():base("DefaultConnection") { } 

    public DbSet<Student> Students { get; set; } 
} 

public class Student 
{ 
    public int ID { get; set; } 

    public string Name { get; set; } 
} 

public ActionResult Index() 
{ 
    MyDataContext context = new MyDataContext(); 
    context.Students.Add(new Student() { ID = 1, Name = "name1" }); 
    context.SaveChanges(); 
    return Content("Create data OK!"); 
} 

Si vous utilisez le code premier modèle, vous devez également créer un dossier App_Data sous dossier wwwroot après le déploiement de votre application Web pour Azure Web App si ce dossier n'est pas créé par défaut.

+0

Des mises à jour? Votre problème est-il résolu? Si oui, veuillez cocher les réponses utiles comme réponse. Si vous avez d'autres questions, n'hésitez pas à me le faire savoir. – Amor