asp.net-mvc – EntityFramework代码在部署到Azure后未运行的第
发布时间:2020-12-16 04:18:36 所属栏目:asp.Net 来源:网络整理
导读:我正在使用代码优先迁移在ASP.NET中开发Web应用程序.它在本地工作正常,但在部署到Azure后,代码首次迁移不会执行.我已经一步一步地跟踪 this tutorial几次,但我无法发现我的设置有什么问题.这是相关的代码: DB上下文: public class ApplicationDbContext :
我正在使用代码优先迁移在ASP.NET中开发Web应用程序.它在本地工作正常,但在部署到Azure后,代码首次迁移不会执行.我已经一步一步地跟踪
this tutorial几次,但我无法发现我的设置有什么问题.这是相关的代码:
DB上下文: public class ApplicationDbContext : IdentityDbContext<ApplicationUser> { public ApplicationDbContext() : base("DefaultConnection",throwIfV1Schema: false) {} public DbSet<BC_Instance> BiocloudInstances { get; set; } static ApplicationDbContext() {} public static ApplicationDbContext Create() { return new ApplicationDbContext(); } protected override void OnModelCreating(DbModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); var conv = new AttributeToTableAnnotationConvention<SoftDeleteAttribute,string>( "SoftDeleteColumnName",(type,attributes) => attributes.Single().ColumnName); modelBuilder.Conventions.Add(conv); } } 连接字符串: (它在发布时被替换,但以防万一) <add name="DefaultConnection" connectionString="Data Source=.SQLEXPRESS;Initial Catalog=bcplatform2;Integrated Security=True;MultipleActiveResultSets=True" providerName="System.Data.SqlClient" /></connectionStrings> 代码优先迁移配置 internal sealed class Configuration : DbMigrationsConfiguration<bcplatform2.Models.ApplicationDbContext> { public Configuration() { AutomaticMigrationsEnabled = false; } protected override void Seed(bcplatform2.Models.ApplicationDbContext context) { var userManager = new ApplicationUserManager(new UserStore<ApplicationUser>(context)); var roleManager = new ApplicationRoleManager(new RoleStore<ApplicationRole>(context)); const string name = {name here}; const string password = {pass here}; const string adminRole = {role}; string[] roles = new string[] { adminRole,ApplicationRole.DefaultRoleName }; foreach (string role in roles) { if (!context.Roles.Any(r => r.Name == role)) { roleManager.CreateAsync(new ApplicationRole(role)); } } if (!context.Users.Any(u => u.UserName == name)) { var user = new ApplicationUser { UserName = name,Email = name,credit = 10 }; userManager.Create(user,password); userManager.AddToRole(user.Id,adminRole); userManager.SetLockoutEnabled(user.Id,false); } } } 出版向导 部署的Web.config中的实体框架部分 <entityFramework> <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory,EntityFramework"> <parameters> <parameter value="mssqllocaldb" /> </parameters> </defaultConnectionFactory> <providers> <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices,EntityFramework.SqlServer" /> </providers> <contexts> <context type="bcplatform2.Models.ApplicationDbContext,bcplatform2"> <databaseInitializer type="System.Data.Entity.MigrateDatabaseToLatestVersion`2[[bcplatform2.Models.ApplicationDbContext,bcplatform2],[bcplatform2.Migrations.Configuration,bcplatform2]],EntityFramework,PublicKeyToken={token}"> <parameters> <parameter value="DefaultConnection_DatabasePublish" /> </parameters> </databaseInitializer> </context> </contexts> </entityFramework> 已部署的Web.config中的连接字符串 <connectionStrings> <add name="DefaultConnection" connectionString="Data Source=tcp:{serverid}.database.windows.net,1433;Initial Catalog={dbid};User Id={user};Password={password}" providerName="System.Data.SqlClient" /> <add name="DefaultConnection_DatabasePublish" connectionString="Data Source=tcp:{serverid}.database.windows.net,1433;Initial Catalog={dbid};User ID={user};Password={password}" providerName="System.Data.SqlClient" /> </connectionStrings> 解决方法
您可以在解决方案中更新Web.config文件
没有必要在“context”部分中提供连接字符串,因为您已经在ApplicationDbContext构造函数中提供了它. 此外,使用此配置,您可以取消选中“发布向导”中的“执行代码首次迁移”. 您的EF部分应该与此类似(最重要的是“上下文”部分): <entityFramework> <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory,EntityFramework"> <parameters> <parameter value="mssqllocaldb" /> </parameters> </defaultConnectionFactory> <providers> <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices,EntityFramework.SqlServer" /> </providers> <contexts> <context type="TestWebApp.Models.AppContext,TestWebApp"> <databaseInitializer type="System.Data.Entity.MigrateDatabaseToLatestVersion`2[[TestWebApp.Models.AppContext,TestWebApp],[TestWebApp.Migrations.Configuration,TestWebApp]],EntityFramework" /> </context> </contexts> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc-3 – 在ASP.NET MVC3中的自定义授权属性中使用
- asp.net – 我应该加密URL参数传递的GUID吗?
- asp.net-mvc-3 – KnockoutJs Observable Arrays和Dropdown
- asp.net – IE bug无效源HTML5音频 – 解决方法
- asp.net-mvc – ViewBag的重点是什么?
- ASP.NET自定义404和500错误页面
- asp.net-mvc – 在没有EF的情况下在appsettings.json中获取
- 为ASP.Net Core Weblistener安装SSL证书
- asp.net-mvc – Asp.net Web api异常仅在IIS部署之后:名为
- asp.net – 编译错误 – 与委托没有相同的签名
推荐文章
站长推荐
- Asp.net mvc 知多少(一)
- asp.net-mvc – 升级到Visual Studio 2015会使in
- asp.net – ASHX httpHandler检测到一个潜在危险
- asp.net-mvc – 如何直接将ASP.NET MVC1升级到MV
- asp.net – applicationSettings和Web.config
- asp.net-mvc – asp.net mvc 3 webgrid排序依然?
- asp.net-mvc – 在web.config文件中创建自定义变
- asp.net – AddToRole和IdentityRole不是当前上下
- asp.net – 跨多个回发存储对象的方法
- asp.net-mvc-3 – 在razor html helper中传递dat
热点阅读