Azure 1小时Web应用程序尝试 - SQL Compact数据库

时间:2017-06-13 11:32:25

标签: c# asp.net-mvc entity-framework azure sql-server-ce

我有使用Entity Framework和Compact DB的ASP.NET MVC Web应用程序 - " db.sdf"或" db.mdf"文件。

它在localhost上工作。

但我希望将它作为1小时试用网络应用程序发布到Azure。

我收到了这个错误:

  

实体框架提供程序类型' System.Data.Entity.SqlServerCompact.SqlCeProviderServices,EntityFramework.SqlServerCompact'在ADO.NET提供程序的应用程序配置文件中注册了具有不变名称的System.Data.SqlServerCe.4.0'无法加载。确保使用了程序集限定名称,并且程序集可用于正在运行的应用程序。

发生了什么事?我已经安装了包:

EF.SqlServer
EF.SqlServerCompact
System.Data.SqlServerCe

web.config看起来:

<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>

1 个答案:

答案 0 :(得分:0)

是否要检查SQL Compact数据库是否可以在Azure Web App上运行?我只是在我的Web App上测试它。它可以正常工作。您可以将它用于开发环境。对于生产环境,我们建议您Azure SQL Database

  

&#39; System.Data.SqlServerCe.4.0&#39;无法加载。

要在.NET应用程序中使用SQL Compact,我们需要从NuGet安装以下软件包。

Microsoft.SqlServer.Compact
EntityFramework.SqlServerCompact

之后,您的应用程序将引用2个.NET程序集和多个本机程序集。

enter image description here

enter image description here

对于您的问题,请检查复制本地属性是否设置为&#39; true&#39;对于2 .NET程序集。

enter image description here

在使用SQL Compact之前,您需要在web.config中配置连接字符串,如下所示。

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

之后,您可以使用EF Compact。以下代码供您参考。

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!");
}

如果您使用代码优先模型,则在将Web应用程序部署到Azure Web App后,如果默认情况下未创建此文件夹,则还需要在wwwroot文件夹下创建App_Data文件夹。