微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

仅在创建数据库时如何初始化身份?

如何解决仅在创建数据库时如何初始化身份?

MVC的新手。

我似乎陷入了Catch-21的困境(不像Catch-22那样严重)。

为了减少不必要的数据库流量,我想仅在首次创建数据库时(例如,在CreateDatabaseIfNotExists(Of ApplicationDbContext)期间,调用我的方法来填充初始Identity数据(创建admin用户,admin角色等)。 )。

麻烦源于我的启动配置必须先设置DbContext,然后再设置ApplicationUserManagerApplicationSignInManager的事实:

Builder.CreatePerOwinContext(AddressOf ApplicationDbContext.Create)
Builder.CreatePerOwinContext(Of ApplicationUserManager)(AddressOf ApplicationUserManager.Create)
Builder.CreatePerOwinContext(Of ApplicationSignInManager)(AddressOf ApplicationSignInManager.Create)

ApplicationUserManager.Create()方法调用ApplicationDbContext,因此调用必须按该顺序进行。

以下是我的身份初始化代码的相关内容

Public Shared Sub InitializeIdentity()
  Dim oUserManager As ApplicationUserManager
  Dim oRoleManager As ApplicationRoleManager

  oUserManager = HttpContext.Current.GetowinContext.GetUserManager(Of ApplicationUserManager)
  oRoleManager = HttpContext.Current.GetowinContext.Get(Of ApplicationRoleManager)

  ...

End Sub

看到问题了吗? ApplicationUserManager依赖于ApplicationDbContext,而ApplicationDbContext依赖于ApplicationUserManager(仅当我尝试从覆盖的InitializeIdentity()方法运行Migrations.Configuration.Seed()时才使用后者)。

当然,我可以将InitializeIdentity()调用放在启动文件的其他位置,但是当第一次创建数据库时只需要运行一次时,它将在每个页面加载时运行。这是对数据库的大量完全不必要的点击。

是否有办法逃避此逻辑循环?我如何告诉框架在设置ApplicationUserManager之后(首先创建上下文时)必须先设置上下文,然后在 var sendGridMessage = new SendGridMessagae(); sendGridMessage.AddTo(receiverEmail,receiverName); sendGridMessage.From = new EmailAddress(senderEmail,senderName); sendGridMessage.Subject = subjectName; sendGridMessage.PlainTextContent = plainText; sendGridMessage.HtmlContent = htmlText; sendGridMessage.AddAttachment(fileName,"test"); 之后运行身份初始化?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。