我启用了代码优先迁移。这是我的configuration.cs:
public sealed class Configuration : DbMigrationsConfiguration<App.AppDbContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = true;
}
protected override void Seed(AppDbContext context)
{
SqlConnection.ClearAllPools();
context.Database.CreateIfNotExists();
System.Data.Entity.Database.SetInitializer(new MigrateDatabaseToLatestVersion<AppDbContext, Configuration>());
if (!WebMatrix.WebData.WebSecurity.Initialized)
{
WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true);
}
SeedMembership(context);
}
使用 SeedMembership 为:
private int SeedMembership(DbContext context)
{
var roles = (SimpleRoleProvider)Roles.Provider;
var membership = (SimpleMembershipProvider)Membership.Provider;
if (!roles.RoleExists("Administrator"))
{
roles.CreateRole("Administrator");
}
if (!roles.RoleExists("User"))
{
roles.CreateRole("User");
}
if (!roles.RoleExists("Moderator"))
{
roles.CreateRole("Moderator");
}
if (membership.GetUser("admin", false) == null)
{
membership.CreateUserAndAccount("admin", "covert");
}
if (!Roles.IsUserInRole("admin", "Administrator"))
{
roles.AddUsersToRoles(new[] { "admin" }, new[] { "Administrator" });
}
context.SaveChanges();
return membership.GetUserId("admin");
}
我的 web.config 中只定义了一个连接字符串:
<add name="DefaultConnection" providerName="System.Data.SqlClient" connectionString="Data Source=.\;Initial Catalog=App;Trusted_Connection=True;MultipleActiveResultSets=True;" />
如果我在本地运行 update-database,我会在包管理器控制台中看到“运行种子方法”,并且所有内容都会按我的预期播种。
但是,当我针对我的 azure 数据库更新数据库时(不确定 azure 是否与此处相关),我看到“运行种子方法”,但数据库永远不会使用角色/管理员用户进行更新。其他表已创建。
我花了整个晚上都在这上面,不知道还能去哪里看。这是我用来迁移 azure db 的内容:
Update-Database -Verbose -StartUpProjectName "App" -ConnectionString "Server=tcp:app.database.windows.net,1433;Database=App;User ID=Dbadmin@app;Password=password;Trusted_Connection=False;Encrypt=True;连接超时=30;MultipleActiveResultSets=True;最大池大小=100;" -ConnectionProviderName "System.Data.SqlClient"
为什么这不起作用?