ASP.NET Webjobs访问Web应用程序EF数据库时出错

时间:2015-09-22 17:43:15

标签: asp.net asp.net-mvc entity-framework azure-webjobs azure-webjobssdk

我正在开发一个webjob in .net,它将定期访问并更改关联的Web应用程序。我已将数据库连接字符串从Web应用程序上的Web.config文件复制到webjob应用程序上的应用程序。以下代码尝试从webjob访问数据库。

Functions.cs:

// This function will be triggered based on the schedule you have set for this WebJob
// This function will enqueue a message on an Azure Queue called queue
[NoAutomaticTrigger]
public static void ManualTrigger(TextWriter log, int value, [Queue("queue")] out string message)
{
    var db = new ApplicationDbContext();
    var vms = db.VMs.ToList();
    var a = 1;

    log.WriteLine("Function is invoked with value={0}", value);
    message = value.ToString();
    log.WriteLine("Following message will be written on the Queue={0}", message);
}

来自上一个功能的这一行

    var vms = db.VMs.ToList();

触发以下错误:

An exception occurred while initializing the database. See the InnerException for details
Inner exception message: Cannot attach the file 'C:\Users\ernestbofill\Source\Repos\biocloud\site\TimeLeftJob\bin\Debug\aspnet-site-20150515045532.mdf' as database 'aspnet-site-20150515045532'.

接下来是App.config和Web.config中的连接字符串。现在我在我的开发者设备上运行这个webjob,所以它应该访问本地数据库。

    <add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\aspnet-site-20150515045532.mdf;Initial Catalog=aspnet-site-20150515045532;Integrated Security=True" providerName="System.Data.SqlClient" />
  </connectionStrings>
你能发现什么问题吗?相同的db查询在MVC Web应用程序中起作用。我在网上找不到任何访问EF数据库的webjob示例。

1 个答案:

答案 0 :(得分:2)

假设您在本地运行应用程序/ webjob,那么问题是您指向的是该位置不存在的数据库。实质上,它是一个连接字符串问题。

当您在本地运行webjob时,它正在从bin / Debug文件夹执行(除非您提供一些特殊配置)。因此,实体框架中的代码从app.config中获取连接字符串,并尝试在提供的位置访问它。在您的情况下,应用程序根目录。这就是内部异常告诉你的。

  

内部异常消息:无法将文件'C:\ Users \ ernestbofill \ Source \ Repos \ biocloud \ site \ TimeLeftJob \ bin \ Debug \ aspnet-site-20150515045532.mdf'作为数据库附加'ASPNET现场-20150515045532'。

为了使其工作,您需要更改连接字符串以指向文件系统中的正确数据库(.mdf)文件。

如果要在不更改连接字符串的情况下对其进行测试,只需从数据库所在的文件系统中的同一位置运行webjob;你可以做几件事:

  1. 将.mdf文件复制到webjob的bin / Debug文件夹。
  2. 将bin / Debug文件夹的副本复制到数据库所在的位置并执行该程序。
  3. 另外,我建议您使用本地版本的SQL Server以及SSMS(SQL Server Management Studio)并在那里安装数据库。如果你这样做,你不会遇到这些问题。

    如果您要将此部署到Azure(并且仍然使用该可移植数据库),请确保调整WebJob中的连接字符串,因为我假设您将遇到类似的问题。

    希望这有帮助,