Entity framework 如何在应用程序启动期间访问存储在App_数据文件夹中的SQL Server Compact

Entity framework 如何在应用程序启动期间访问存储在App_数据文件夹中的SQL Server Compact,entity-framework,permissions,sql-server-ce,odata,Entity Framework,Permissions,Sql Server Ce,Odata,我有一个基本的.NET4网站。它包含一个实体框架模型,该模型映射到我存储在App\u Data文件夹中的SQL Server Compact数据库 我在网站上添加了一个OData服务,我公开了实体,一切正常,我可以发布到我的共享主机上,并且可以毫无问题地读/写数据库 但是,我想在应用程序启动期间访问数据库中的数据(以创建一个小的搜索索引)。当我在应用程序生命周期的那个时刻创建实体框架上下文的实例时,它抛出一个异常,即它无权访问数据库。它在本地运行良好,只是当我发布到共享主机时出现了问题 通常我认

我有一个基本的.NET4网站。它包含一个实体框架模型,该模型映射到我存储在
App\u Data
文件夹中的SQL Server Compact数据库

我在网站上添加了一个OData服务,我公开了实体,一切正常,我可以发布到我的共享主机上,并且可以毫无问题地读/写数据库

但是,我想在
应用程序启动期间访问数据库中的数据(以创建一个小的搜索索引)。当我在应用程序生命周期的那个时刻创建实体框架上下文的实例时,它抛出一个异常,即它无权访问数据库。它在本地运行良好,只是当我发布到共享主机时出现了问题

通常我认为这只是一个直接的权限问题,但OData服务工作正常,因此必须使用与在
Application\u Start
中执行的代码不同的权限来执行

以前有没有人见过这件事,或者有没有人知道会发生什么

System.UnauthorizedAccessException: Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))
  at System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(Int32 errorCode, IntPtr errorInfo)
  at System.Runtime.InteropServices.Marshal.ThrowExceptionForHR(Int32 errorCode)
  at System.Data.SqlServerCe.UnmanagedLibraryHelper..ctor(String fileName)
  at System.Data.SqlServerCe.NativeMethodsHelper..ctor(String modulePath)
  at System.Data.SqlServerCe.NativeMethods.LoadValidLibrary(String modulePath)
  at System.Data.SqlServerCe.NativeMethods.LoadNativeBinariesFromPrivateFolder(String privateInstall)
  at System.Data.SqlServerCe.NativeMethods.LoadNativeBinaries()
  at System.Data.SqlServerCe.SqlCeConnection..ctor()
  at System.Data.SqlServerCe.SqlCeProviderFactory.CreateConnection()
  at System.Data.EntityClient.EntityConnection.GetStoreConnection(DbProviderFactory factory)
  at System.Data.EntityClient.EntityConnection.ChangeConnectionString(String newConnectionString)
  at System.Data.EntityClient.EntityConnection..ctor(String connectionString)
  at System.Data.Objects.ObjectContext.CreateEntityConnection(String connectionString)
  at System.Data.Objects.ObjectContext..ctor(String connectionString, String defaultContainerName)
  at LDS.Model1Container..ctor() in *REMOVED*\LDS\Model1.Designer.cs:line 40
  at LDS.Global.BuildIndex() in *REMOVED*\LDS\Global.asax.cs:line 38

好的,我想我已经解决了

当应用程序启动时,它在NT AUTHORITY\NETWORK SERVICE帐户下运行

当一个普通的web请求传入时,它将使用\IUSR\uuu帐户执行

在我的共享主机上,网络服务帐户显然没有对App_数据文件夹的写入权限,但IUSR帐户有


我想这就回答了为什么会出现问题的问题。

对这个问题有一个评论:关于线程不安全。嗨-谢谢你的提示。在这个例子中,我并没有试图在Application_Start的范围之外保持连接的活动状态,我只是想迭代一些数据并构建内存中的搜索索引(这是线程安全的)。这个问题可以简化为根本不包括SQLCompact。我已更改代码,尝试在应用程序启动期间使用基本StreamWriter将一个txt文件写入App_数据文件夹,但由于访问权限不足而出现错误。同一行代码从同一网站的网页上的按钮单击处理程序写入文件。