1. 程式人生 > >asp.net MVC5,如何使用mysql資料庫,使用MVC框架中自帶的identity使用者驗證體系

asp.net MVC5,如何使用mysql資料庫,使用MVC框架中自帶的identity使用者驗證體系

問題如題

現在很多時候,即使是.net專案,我們用的資料庫也未必時是 SQL Server了。
但很多VS 自帶的框架(如MVC 、WebAPI等框架)中的示例自帶的仍然是預設Sql Server的,而且並不一定好改成別的資料庫。這有時候就很苦惱。

比如.net MVC框架中自帶的一套使用者體系,含有使用者登入註冊許可權角色等一大堆的功能。如果我們開始一個新專案,不得不使用Sql Server以外的資料庫的化,而且又沒有足夠的成本來重新開發一套許可權管理機制的話,那我們要怎麼辦呢?
自己倉促寫的通常又太low,也不怎麼安全。
套用別的又很麻煩。
而實際上,這種情況在我的工作經歷中一直持續發生,到現在我也沒能成功地運用好VS .net框架中自帶的那一套許可權體系,每次都自己開發,但又覺得有點low。

痛定思痛啊,這篇博文就是為了解決這個問題。

這裡面提供兩種思路和方案。

經嘗試,就算我最終在web.config裡面把mysql的配置好,專案可以啟動,但註冊和登入等需要讀寫資料庫的時候還是會出錯。
原因很簡單,sql server的話,可以直接建立資料庫和表,畢竟是自家親兒子。
別的資料庫,比如mysql,就無法建立資料庫和表,也就失敗了。
table XXX not existed的錯誤提示很明顯了。

於是我就想到了一種低階一點的辦法,事實證明,好理解,也有效。

1.低階一點的。

手工按照.net框架裡要的那樣,建好一個數據庫和表,以及對應欄位。
如圖:
如圖的資料庫和表結構

那麼你又要問,到底是什麼結構呢? 這多麻煩啊
我的辦法是:
用VS新建一個MVC專案,然後就簡單粗暴執行,註冊等。此時會發現已經有sql server資料庫和表生成了。
如圖
“檢視” – sql server物件管理器“
這裡寫圖片描述

然後,
依次獲得到各個table的建立語句
這裡寫圖片描述

然後就可以看到開啟的sql檔案裡的類似如下的sql語句片段:

USE [aspnet-WebApplication4-20180326090819]
GO

/****** 物件: Table [dbo].[AspNetRoles] 指令碼日期: 2018/3/27 11:46:34 ******/
SET ANSI_NULLS ON
GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[AspNetRoles] ( [Id] NVARCHAR (128) NOT NULL, [Name] NVARCHAR (256) NOT NULL );
GO CREATE UNIQUE NONCLUSTERED INDEX [RoleNameIndex] ON [dbo].[AspNetRoles]([Name] ASC); GO ALTER TABLE [dbo].[AspNetRoles] ADD CONSTRAINT [PK_dbo.AspNetRoles] PRIMARY KEY CLUSTERED ([Id] ASC);

可以用來建立mysql中的表嗎?
機智哦
不過直接貼上過去執行還是會報錯的,畢竟是不同的資料庫,資料型別、語法什麼的還是有些不一樣。
我們就取其中的

CREATE TABLE [dbo].[AspNetRoles] (
    [Id]   NVARCHAR (128) NOT NULL,
    [Name] NVARCHAR (256) NOT NULL
);

建立表的這句話去mysql中建表就行了。
再相應修改一下:

CREATE TABLE AspNetRoles (
    Id   VARCHAR (128) NOT NULL,
    Name VARCHAR (256) NOT NULL
);

如上,我去掉了dbo,去掉了中括號,NVARCHAR改為VARCHAR。
然後在mysql中執行,真的就成功了。
所以,另外的幾個表,以此類推,在mysql中就可以得到幾個表,結構和欄位與sql server中的都一致了。
這些我已經親測了,確實成功。
而且後續的執行,註冊,登入等都可以成功。
不再贅述。

總之,這裡算是耍了個滑頭。
但也算是解決了問題,畢竟能用。

但上述方法真的好勉強啊。
問題的關鍵其實很簡單,就是在現有程式碼條件下,mysql沒法直接就建立了mysql table這些東西。
如果能呢,那豈不是很好?

這也就是我後來終於找到的

2. 高階一點的做法

我本機的環境:
windows 10 64bit
Visual Studio 2015 旗艦版,.NET 4.5.2,
Mysql 5.7.17 社群版。
按照博文中的配置好之後,直接執行成功,一字不改。
而且註冊登入都成功寫入資料庫。

完全仿照這個做完就好了。