2017-04-17 27 views
3

我的應用程序已經開發了大約一個月。我現在決定使用ASP.NET身份。我已經有了身份驗證模型,但需要創建表格。我在想,我不確定爲什麼如果我有視圖模型,我還沒有桌子?我已經在初始化器中使用自己的自定義上下文創建了,我只需要知道如何讓EF爲用戶和角色構建包含的標識表?我環顧四周,沒有發佈的答案似乎是我需要的?如何使用代碼先在已創建的數據庫中創建ASP.net標識表?

+0

如果你想只運行,而不是使用EF遷移,你可以檢查SQL腳本[我的公開要點的AspNetCore身份+ IdentityServer4 SQL腳本](https://gist.github.com/jeroenheijmans/8fa79427abc25a864cb055616644172f)。 – Jeroen

回答

2

所以後有點讀擺弄我得到了答案。我只需要從ASP.NET Identity運行註冊方法並創建所有表。

1

考慮遷移

如果適用,你需要考慮建立一個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 
+0

我的確瞭解遷移,我只是想找到一種方法來創建沒有遷移的表。這是不可能的,如果數據庫已經創建? – LeRainman

+0

您可以在[此博客文章]中找到腳本(https://danieleagle.com/2014/05/setting-up-asp-net-identity-framework-2-0-with-database-first-vs2013-update- 2-spa-template /),您可以使用它來生成必要的與身份相關的表格,而無需使用遷移。該帖子基本上只是自動生成表格,然後作者腳本化每一個(例如用戶,角色等),你可以自己執行。 –

-1

在你的數據庫上運行這個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 
相關問題