1

我正在.net中开发一个网络作业,它将经常访问和更改相关的网络应用程序。我已将 db 连接字符串从 web 应用程序上的 Web.config 文件复制到 webjob 应用程序上的应用程序。以下代码尝试从 webjob 访问数据库。

函数.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 中的连接字符串。现在我正在我的开发人员设备上运行这个网络作业,所以它应该访问本地数据库。

    <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 数据库的网络作业示例。

4

1 回答 1

2

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

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

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

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

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

  1. 将 .mdf 文件复制到 webjob 的 bin/Debug 文件夹。
  2. 将 bin/Debug 文件夹的内容复制到数据库所在的位置并执行程序。

此外,我对您的建议是拥有本地版本的 SQL Server 以及 SSMS(SQL Server Management Studio)并在那里安装数据库。如果您这样做,您将不会遇到这些问题。

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

希望这可以帮助,

于 2015-09-23T13:20:44.817 回答