有了ASP.NET Web窗体应用程序,我使用在SQL server中创建的aspnetdb
数据库。
当迁移到Azure时,有没有任何方法可以用其他东西替换aspnetdb
数据库,这样它就不会吃掉Azure SQL数据库组件中的一个数据库?或者特定数据库是否以某种方式作为应用程序服务(Azure组件)的一部分得到支持?
使用Azure应用程序服务时,aspnetdb
数据库形式的典型替换方式是什么?
更新:在原始应用程序中,我使用MS SQL Standard Ed.中的两个数据库——通常类似于应用程序表的company_users
(这是aspnetdb
的名称)和company_app
。我通常通过一个小型外部应用程序创建company_users
,该应用程序创建数据库、角色以及初始用户——请参阅下面的缩短代码。
因此,将这两个数据库迁移到Azure SQL数据库并以相同的方式使用可能会更简单。另一方面,必须根据数据库的数量为Azure SQL付费。虽然它对company_app
来说很好,但company_users
相当小,可能值得用更便宜的东西取代。这就是将框架中用于身份验证/授权的部分(aspnetdb
别名company_users
)替换为不占用一个SQL数据库的其他部分的动机。
我的InitUsers.exe
:的缩短源代码
// ... get the configuration information to be used for...
SqlServices.Install(SQLServerName,
SQLServerUser, SQLServerPassword,
ASPNETdbName, SqlFeatures.All);
// ... and the roles in the loop...
SqlRoleProvider roleProvider = AModule.GetRoleProvider();
string[] roles = { "admin", "poweruser", /* ... */ };
foreach (var role in roles) {
if (!roleProvider.RoleExists(role))
roleProvider.CreateRole(role);
}
// ... and the initial users...
List<string[]> userList = new List<string[]> {
// 0 1 2 3 4 5 6
// login, email, roles, first, last tit., phone
new[] { "nemo", "nemo@ocean.org", "admin", "Nihil", "Nemo", "cpt.", "123 456 789"}
};
foreach (var info in userList) {
string login = info[0];
string password = ...;
string email = info[1];
string[] rolenames = info[2].Split();
string first = info[3];
string last = info[4];
string title = info[5];
string phone = info[6];
AModule.MakeUser(login, password, email, rolenames,
first, last, title, phone,
true); // isApproved
}
迁移到Microsoft Azure时如何替换App_Data\aspnetdb.mdf?
根据我的理解,您正在使用SQL Server LocalDB。Azure Web Apps不安装SQL Server Express。我认为您可以将LocalDB数据库迁移到SQL Server或SQL Azure。这里有一个类似的问题,你可以参考它。为了将你的数据库迁移到Azure SQL数据库或SQL Server,你可以遵循以下方法:
-
使用SQL Server Management Studio(SSMS),右键单击数据库,然后选择"任务>导出数据",配置数据源和目标。更多细节,你可以参考这里。
-
请使用Visual Studio中的SSIS导入和导出向导,有关详细信息,请参阅此处。
此外,对于创建Azure SQL数据库,您可以按照此处操作。此外,如果您使用的是实体框架模型优先或实体框架代码优先,则可以轻松更改连接字符串并重新生成数据库。