我刚刚使用 Web 应用程序 + MySQL 应用程序服务在 azure 上部署了我的 Web 应用程序。 我对数据库使用 Entity Framework ,部署后出现“系统找不到指定的文件”异常。我认为它必须对连接字符串做一些事情。我认为应用程序实际上无法连接数据库。 我花了很多天试图弄清楚如何解决它。我已经阅读了很多关于此的教程,但没有成功。
我只能发布2张图片。
这是我使用的DbContext 要创建 LocalDB,我不知道如何更改它以与 Azure 上的数据库建立连接。
public class AppDbContext : DbContext
{
public AppDbContext() : base("Valtrends")
{
InitializeDbContext();
}
public DbSet<FactorType> FactorTypes { get; set; }
public DbSet<ComplexType> ComplexTypes { get; set; }
public DbSet<Value> Values { get; set; }
public DbSet<DataLoader.Entities.Version> Versions { get; set; }
public DbSet<DefaultPlotData> DefaultPlotData { get; set; }
public DbSet<GraphBucket> GraphBuckets { get; set; }
public DbSet<XfactorFrom> XfactorsFrom { get; set; }
public DbSet<XfactorTo> XfactorsTo { get; set; }
public DbSet<DistributionData> DistributionData { get; set; }
public DbSet<Bin> Bins { get; set; }
public DbSet<DefaultPlotSettings> DefaultPlotSettings { get; set; }
private void InitializeDbContext()
{
Database.SetInitializer(new AppDbInitializer());
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<FactorType>().HasMany(m => m.CompatibilityListXY).WithMany();
}
}
最佳答案
如果你想在应用程序内使用MySQL,我建议你首先使用ftp找到连接字符串。
您可以首先设置部署凭据并使用此用户名和密码访问网络应用程序的 ftp。如下图所示:
找到mysql文件夹并找到MYSQLCONNSTR_localdb.txt如下:
路径:ftp://{url}.ftp.azurewebsites.windows.net/data/mysql/
您将找到如下连接字符串:
Database=localdb;Data Source=127.0.0.1:52739;User Id=azure;Password=6#vWHD_$
注意:您的网络配置中正确的连接字符串如下所示,您从txt中获取的连接字符串是错误的:
Database=azuredb;Data Source=127.0.0.1;User Id=azure;Password=6#vWHD_$;port=52739
更新:我建议您可以使用 GetEnvironmentVariable 方法来获取连接字符串,因为如果重新启动 Web 服务,您的 my sql 的端口将会更改。您可以尝试下面的代码来获取连接字符串并将其转换为正确的格式。
获取连接字符串并格式化它示例:
public static string connStrToArray()
{
string connStr = Environment.GetEnvironmentVariable("MYSQLCONNSTR_localdb").ToString();
string[] connArray = Regex.Split(connStr, ";");
string connectionstring = null;
for (int i = 0; i < connArray.Length; i++)
{
if (i == 1)
{
string[] datasource = Regex.Split(connArray[i], ":");
connectionstring += datasource[0] + string.Format(";port={0};", datasource[1]);
}
else
{
connectionstring += connArray[i] + ";";
}
}
return connectionstring;
}
此外,我猜你的localdb使用的是sql服务器,如果你想使用mysql成为EF数据服务器提供者,你需要安装MySql.Data.Entity(你可以在Nuget包中找到它)并使用数据库.SetInitializer 将 SqlGenerator 设置为 MySqlClient。
更多详细信息,您可以引用以下dbcontext代码:
namespace TestForMySQL
{
using System;
using System.ComponentModel.DataAnnotations;
using System.Data.Entity;
using System.Data.Entity.Migrations;
using System.Linq;
using System.Text.RegularExpressions;
public class MyContext : DbContext
{
public static string connStrToArray()
{
string connStr = Environment.GetEnvironmentVariable("MYSQLCONNSTR_localdb").ToString();
string[] connArray = Regex.Split(connStr, ";");
string connectionstring = null;
for (int i = 0; i < connArray.Length; i++)
{
if (i == 1)
{
string[] datasource = Regex.Split(connArray[i], ":");
connectionstring += datasource[0] + string.Format(";port={0};", datasource[1]);
}
else
{
connectionstring += connArray[i] + ";";
}
}
return connectionstring;
}
public MyContext( )
{
this.Database.Connection.ConnectionString = connStrToArray();
}
static MyContext()
{
//This is important
Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyContext, Configuration>());
}
public virtual DbSet<Mytest> MyEntities2 { get; set; }
}
internal sealed class Configuration : DbMigrationsConfiguration<TestForMySQL.MyContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = true;
//Change the SqlGenerator to MySql very important
SetSqlGenerator("MySql.Data.MySqlClient", new MySql.Data.Entity.MySqlMigrationSqlGenerator());
}
protected override void Seed(TestForMySQL.MyContext context)
{
context.MyEntities2.AddOrUpdate(new Mytest()
{
Id = 1
});
context.SaveChanges();
}
}
public class Mytest
{
public int Id { get; set; }
}
}
<小时/>
what does the url in :ftp://{url}.ftp.azurewebsites.windows.net/data/mysql/ stand for? The URL of the app service doesn't work for me
您可以在概述中找到 ftp url 和用户名,如下所示:
查看 FTP 主机名和 FTP/部署用户名。
<小时/>更新:
I have changed the credentials, but I have only URL, App Service plan/pricing tier and Continuous delivery status in the right column of Essentials
您可以下载包含 ftp URL 的发布配置文件。
见下图:
文件:
<小时/>此外,还有另一种方法可以找到存储连接字符串。
您可以使用 kudu 工具直接查看 Web 服务中的文件。
更多详细信息,您可以引用以下步骤。
1.在DEVELOPMENT TOOLS中找到Advanced Tools点击进入。
3.找到正确的文件夹(data\mysql)并找到MYSQLCONNSTR_localdb.txt文件。 单击编辑按钮。
关于mysql - Azure Web应用程序+ MySQL和 Entity Framework : The system cannot find the file specified,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43718144/