我有使用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>
答案 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程序集和多个本机程序集。
对于您的问题,请检查复制本地属性是否设置为&#39; true&#39;对于2 .NET程序集。
在使用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文件夹。