大多數情況下我們使用.NET或ASP.NET(包括MVC)程序時,我們會同時選擇SQL Server 或者SQL Express (其他微軟產品)做數據庫。但是今天使用MVC已經完全沒有必要這么做了,ASP.NET MVC的創建與ASP.NET相似,在.NET中一個核心組件ADO.NET允許我們連接各種不同的數據庫,我們只需要一個連接器就可以了。在MYSQL中提供了幾種不同的連接器供我們選擇,官方廣泛接受的MYSQL.NET Connector
。
使用官方提供的包我們可以使用完整的功能,需要注意的是我們下載Connector后我們要如何配置web.config來連結我們的ASP.NET MVC程序已經如何使用ASP.NET Mumbership。首先我們先下載
MySQL Connector/NET,下載地址:
http://dev.mysql.com/downloads/connector/net/ 下載好后,我們需要配置我們的web.config文件:
<?xml version="1.0" encoding="utf-8"?> <configuration> <connectionStrings> <add name="DatabaseConnection" connectionString="Server=localhost;Port=3306;Database=yourdbname;Uid=yourusername;Pwd=yourpassword;" providerName="MySql.Data.MySqlClient" /> </connectionStrings> <!-- ... --> </configuration>
現在我們就使用DatabaseConnection做為我們的主數據庫連接了,按照慣例(Entity Freamwork)我們需要把繼承自DbContext的類命名為DatabaseConnection。現在Entity Freamwork就可和MySQL數據庫一起工作了。那么我們要如何使用Mumbership呢? 我們需要在web.config中做如下的配置:
<configuration> <!-- ... --> <system.web> <!-- ... --> <authentication mode="Forms"> <forms loginUrl="~/Account/LogOn" timeout="2880" /> </authentication> <roleManager enabled="true" defaultProvider="MySQLRoleProvider"> <providers> <clear/> <add name="MySQLRoleProvider" autogenerateschema="true" type="MySql.Web.Security.MySQLRoleProvider, MySql.Web, Version=6.5.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" connectionStringName="MarioDB" applicationName="/" /> </providers> </roleManager> <membership defaultProvider="MySQLMembershipProvider"> <providers> <clear /> <add name="MySQLMembershipProvider" autogenerateschema="true" type="MySql.Web.Security.MySQLMembershipProvider, MySql.Web, Version=6.5.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" connectionStringName="MarioDB" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="true" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" /> </providers> </membership> <!-- ... ---> </system.web> </configuration>
這里有一個重要的屬性需要注意,如果我們沒有設置autogenerateschema 為true的話,我們就要確保我們數據庫中已經有包含mumbership和rule的表。這個不是必要的,但是我們后面為什么又要移除他呢?一方面是因為Database User不應該有太多權限,當表以創建好我們就要移除; 另一方面,我們要做額外的檢查是否存在這些表,根本沒有必要,刪除會節省一定的時間。