我正在开发一个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示例。
答案 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;你可以做几件事:
另外,我建议您使用本地版本的SQL Server以及SSMS(SQL Server Management Studio)并在那里安装数据库。如果你这样做,你不会遇到这些问题。
如果您要将此部署到Azure(并且仍然使用该可移植数据库),请确保调整WebJob中的连接字符串,因为我假设您将遇到类似的问题。
希望这有帮助,