我的應用程序已經開發了大約一個月。我現在決定使用ASP.NET身份。我已經有了身份驗證模型,但需要創建表格。我在想,我不確定爲什麼如果我有視圖模型,我還沒有桌子?我已經在初始化器中使用自己的自定義上下文創建了,我只需要知道如何讓EF爲用戶和角色構建包含的標識表?我環顧四周,沒有發佈的答案似乎是我需要的?如何使用代碼先在已創建的數據庫中創建ASP.net標識表?
回答
所以後有點讀擺弄我得到了答案。我只需要從ASP.NET Identity運行註冊方法並創建所有表。
考慮遷移
如果適用,你需要考慮建立一個migration,這將允許您生成(並可能執行)所需的腳本來創建數據庫中相應的表或變更。
默認情況下,你應該有一些類型ApplicationDbContext
類,看起來像將被用來定義你的「安全相關的」數據庫中的以下內容:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("DefaultConnection", false)
{
}
// Other code omitted for brevity
}
然後你只需要運行在軟件包管理控制檯啓用的遷移命令:
Enable-Migrations
這應該生成包含控制如何migrati各種配置文件的應用程序中的文件夾遷移ons被執行以及InitialCreate
遷移。如果您以前在您的應用程序中有一些與Code-First相關的代碼,那麼這可能只存在,如果沒有,請不要擔心。那麼你可以嘗試運行更新,數據庫命令,應該對數據庫執行任何遷移(包括最初的一):
Update-Database
一旦你的數據庫已經更新,您可以繼續更改您的模型簡單地創建並通過添加遷移命令和前一次更新-database命令執行新的遷移:
Add-Migration "AddedAnotherPropertyToFoo"
Update-Database
我的確瞭解遷移,我只是想找到一種方法來創建沒有遷移的表。這是不可能的,如果數據庫已經創建? – LeRainman
您可以在[此博客文章]中找到腳本(https://danieleagle.com/2014/05/setting-up-asp-net-identity-framework-2-0-with-database-first-vs2013-update- 2-spa-template /),您可以使用它來生成必要的與身份相關的表格,而無需使用遷移。該帖子基本上只是自動生成表格,然後作者腳本化每一個(例如用戶,角色等),你可以自己執行。 –
也許只是對數據庫運行ASP.NET的身份SQL腳本,如果你不想啓用遷移:
https://www.codeproject.com/Tips/677279/SQL-script-for-creating-an-ASP-NET-Identity-Databa
在你的數據庫上運行這個SQL腳本並完成它。
/****** Object: Table [dbo].[AspNetRoles] Script Date: 15-Mar-17 10:27:06 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[AspNetRoles](
[Id] [nvarchar](128) NOT NULL,
[Name] [nvarchar](256) NOT NULL,
CONSTRAINT [PK_dbo.AspNetRoles] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: Table [dbo].[AspNetUserClaims] Script Date: 15-Mar-17 10:27:06 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[AspNetUserClaims](
[Id] [int] IDENTITY(1,1) NOT NULL,
[UserId] [nvarchar](128) NOT NULL,
[ClaimType] [nvarchar](max) NULL,
[ClaimValue] [nvarchar](max) NULL,
CONSTRAINT [PK_dbo.AspNetUserClaims] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
/****** Object: Table [dbo].[AspNetUserLogins] Script Date: 15-Mar-17 10:27:06 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[AspNetUserLogins](
[LoginProvider] [nvarchar](128) NOT NULL,
[ProviderKey] [nvarchar](128) NOT NULL,
[UserId] [nvarchar](128) NOT NULL,
CONSTRAINT [PK_dbo.AspNetUserLogins] PRIMARY KEY CLUSTERED
(
[LoginProvider] ASC,
[ProviderKey] ASC,
[UserId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: Table [dbo].[AspNetUserRoles] Script Date: 15-Mar-17 10:27:06 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[AspNetUserRoles](
[UserId] [nvarchar](128) NOT NULL,
[RoleId] [nvarchar](128) NOT NULL,
CONSTRAINT [PK_dbo.AspNetUserRoles] PRIMARY KEY CLUSTERED
(
[UserId] ASC,
[RoleId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: Table [dbo].[AspNetUsers] Script Date: 15-Mar-17 10:27:06 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[AspNetUsers](
[Id] [nvarchar](128) NOT NULL,
[Email] [nvarchar](256) NULL,
[EmailConfirmed] [bit] NOT NULL,
[PasswordHash] [nvarchar](max) NULL,
[SecurityStamp] [nvarchar](max) NULL,
[PhoneNumber] [nvarchar](max) NULL,
[PhoneNumberConfirmed] [bit] NOT NULL,
[TwoFactorEnabled] [bit] NOT NULL,
[LockoutEndDateUtc] [datetime] NULL,
[LockoutEnabled] [bit] NOT NULL,
[AccessFailedCount] [int] NOT NULL,
[UserName] [nvarchar](256) NOT NULL,
CONSTRAINT [PK_dbo.AspNetUsers] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
ALTER TABLE [dbo].[AspNetUserClaims] WITH CHECK ADD CONSTRAINT [FK_dbo.AspNetUserClaims_dbo.AspNetUsers_UserId] FOREIGN KEY([UserId])
REFERENCES [dbo].[AspNetUsers] ([Id])
ON DELETE CASCADE
GO
ALTER TABLE [dbo].[AspNetUserClaims] CHECK CONSTRAINT [FK_dbo.AspNetUserClaims_dbo.AspNetUsers_UserId]
GO
ALTER TABLE [dbo].[AspNetUserLogins] WITH CHECK ADD CONSTRAINT [FK_dbo.AspNetUserLogins_dbo.AspNetUsers_UserId] FOREIGN KEY([UserId])
REFERENCES [dbo].[AspNetUsers] ([Id])
ON DELETE CASCADE
GO
ALTER TABLE [dbo].[AspNetUserLogins] CHECK CONSTRAINT [FK_dbo.AspNetUserLogins_dbo.AspNetUsers_UserId]
GO
ALTER TABLE [dbo].[AspNetUserRoles] WITH CHECK ADD CONSTRAINT [FK_dbo.AspNetUserRoles_dbo.AspNetRoles_RoleId] FOREIGN KEY([RoleId])
REFERENCES [dbo].[AspNetRoles] ([Id])
ON DELETE CASCADE
GO
ALTER TABLE [dbo].[AspNetUserRoles] CHECK CONSTRAINT [FK_dbo.AspNetUserRoles_dbo.AspNetRoles_RoleId]
GO
ALTER TABLE [dbo].[AspNetUserRoles] WITH CHECK ADD CONSTRAINT [FK_dbo.AspNetUserRoles_dbo.AspNetUsers_UserId] FOREIGN KEY([UserId])
REFERENCES [dbo].[AspNetUsers] ([Id])
ON DELETE CASCADE
GO
ALTER TABLE [dbo].[AspNetUserRoles] CHECK CONSTRAINT [FK_dbo.AspNetUserRoles_dbo.AspNetUsers_UserId]
GO
- 1. 代碼優先 - 不創建數據庫
- 2. 如何使用代碼優先遷移創建數據庫?
- 3. EF代碼優先 - 刪除後創建數據庫然後創建數據庫
- 4. ASP.NET MVC標識表創建
- 5. ASP.NET EF5代碼優先不創建SQL Server CE數據庫
- 6. 如何從ASP.net 2.0中的代碼隱藏創建數據庫?
- 7. 已創建數據庫但未創建數據庫表
- 8. 如何使用代碼行在SqlServer2008 Express中創建數據庫
- 9. 實體框架代碼優先 - 使用MySql創建數據庫?
- 10. 如何強制EF代碼首先重新創建數據庫?
- 11. 如何創建「動態」數據庫結構(EF代碼優先)
- 12. Azure在代碼中創建數據庫
- 13. 如何從ASP.NET代碼創建Sql Server數據庫用戶
- 14. 在數據庫中創建「主」(EF代碼優先)
- 15. asp.net mvc實體框架代碼首先創建數據庫如果不存在
- 16. 使用標識與POST在數據庫中創建新任務
- 17. 如何先用存儲過程創建asp.net MVC數據庫?
- 18. C#EF代碼優先 - 創建數據庫並添加數據
- 19. 如何先使用代碼創建自引用表?
- 20. EF代碼優先 - 創建數據庫 - 用戶登錄失敗
- 21. 代碼首先在EF不創建數據庫
- 22. 如何使用AccountController中的Asp.net mvc標識創建新用戶?
- 23. 在SQL Server中使用代碼優先實體框架創建數據庫
- 24. 代碼在ASP.NET中創建CAPTCHA代碼?
- 25. 如何使用動態sql在最近創建的數據庫中創建表?
- 26. 如何使用數據庫數據在angularjs中創建圖表?
- 27. 如何使用相同的標識在數據庫中創建一些筆記?
- 28. 在代碼中創建不存在的數據庫表
- 29. EF代碼首先不會創建新的數據庫
- 30. 代碼先創建帖子
如果你想只運行,而不是使用EF遷移,你可以檢查SQL腳本[我的公開要點的AspNetCore身份+ IdentityServer4 SQL腳本](https://gist.github.com/jeroenheijmans/8fa79427abc25a864cb055616644172f)。 – Jeroen