asp.net MVC5,如何使用mysql数据库,使用MVC框架中自带的identity用户验证体系

时间:2022-09-22 07:32:14

问题如题

现在很多时候,即使是.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框架里要的那样,建好一个数据库和表,以及对应字段。
如图:
asp.net MVC5,如何使用mysql数据库,使用MVC框架中自带的identity用户验证体系

那么你又要问,到底是什么结构呢? 这多麻烦啊
我的办法是:
用VS新建一个MVC项目,然后就简单粗暴运行,注册等。此时会发现已经有sql server数据库和表生成了。
如图
“视图” – sql server对象管理器“
asp.net MVC5,如何使用mysql数据库,使用MVC框架中自带的identity用户验证体系

然后,
依次获得到各个table的创建语句
asp.net MVC5,如何使用mysql数据库,使用MVC框架中自带的identity用户验证体系

然后就可以看到打开的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 社区版。
按照博文中的配置好之后,直接运行成功,一字不改。
而且注册登录都成功写入数据库。

完全仿照这个做完就好了。


关于对.net中Identity的理解,这个也许有点帮助
同上