带有MySQL的ASP.NET MVC 4 EF5

kas*_*rhj 16 mysql asp.net-mvc entity-framework

所以我刚拿起VS2012,我想用EF5启动一个ASP.NET MVC 4应用程序.

我的主机没有MSSQL所以我必须使用MySQL.

如何告诉我的应用程序它应该使用MySQL?(我要么使用devart MySQL连接器,要么使用mysql.com中的连接器)

agi*_*hua 26

您需要使用连接字符串DbProviderFactory和MySql Connector 6.5.4的自定义DatabaseInitializer设置配置.我详细介绍了使用EF5和MySql完整步骤,包括我博客上初始化程序的代码.如果您需要ASP.Net成员资格提供程序解决方案之前曾被问过:ASP.NET的成员身份/角色提供程序?我将在此处发布解决方案,以获得完整的EF5 MySql解决方案.

MySql连接器当前不支持EF 5迁移,ASP.NET仅支持MS SQL上的SimpleMembership(默认为MVC4)而不支持MySql.以下解决方案适用于Code First.

步骤是:

  1. 从NuGet获取EF 5
  2. 从NuGet(6.5.4)或MySql(6.6.4)获取MySql.Data和MySql.Data.Entity
  3. 配置MySql数据提供程序
  4. 配置MySql连接字符串
  5. 创建自定义MySql数据库初始化程序
  6. 配置自定义MySql数据库初始化程序
  7. 如果需要,请配置ASP.NET成员身份

DbProvider

<system.data>
 <DbProviderFactories>
  <remove invariant="MySql.Data.MySqlClient"/>
  <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient"
    description=".Net Framework Data Provider for MySQL" 
    type="MySql.Data.MySqlClient.MySqlClientFactory,MySql.Data" />
 </DbProviderFactories>
</system.data>
Run Code Online (Sandbox Code Playgroud)

连接字符串

<connectionStrings>
  <add name="ConnectionStringName" 
    connectionString="Datasource=hostname;Database=schema_name;uid=username;pwd=Pa$$w0rd;" 
    providerName="MySql.Data.MySqlClient" />
</connectionStrings>
Run Code Online (Sandbox Code Playgroud)

数据库初始化器

如果您正在使用NuGet(6.5.4)中的MySql连接器,则需要自定义初始化程序.代码见http://brice-lambson.blogspot.se/2012/05/using-entity-framework-code-first-with.htmlhttp://www.nsilverbullet.net/2012/11/07/ 6步对得到实体框架-5-劳动与MySQL的-5-5 /

然后将其添加到配置中

<configSections>
  <section name="entityFramework" 
    type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, 
    EntityFramework, Version=5.0.0.0, Culture=neutral, 
    PublicKeyToken=b77a5c561934e089" />
</configSections>
<entityFramework>
  <contexts>
      <context type="Namespace.YourContextName, AssemblyName">
         <databaseInitializer 
           type="Namespace.YourChosenInitializer, AssemblyName">
         </databaseInitializer>
      </context>
    </contexts>
    <defaultConnectionFactory 
      type="MySql.Data.MySqlClient.MySqlClientFactory,MySql.Data" />
</entityFramework>
Run Code Online (Sandbox Code Playgroud)

ASP.NET成员资格

<membership defaultProvider="MySqlMembershipProvider">
  <providers>
    <clear />
    <add name="MySqlMembershipProvider"
         type="MySql.Web.Security.MySQLMembershipProvider,
         MySql.Web, Version=6.5.4.0, PublicKeyToken=c5687fc88969c44d"
     autogenerateschema="true"
     connectionStringName="*NAME_OF_YOUR_CONN_STRING*"
     enablePasswordRetrieval="false"
     enablePasswordReset="true"
     requiresQuestionAndAnswer="false"
     requiresUniqueEmail="false"
     passwordFormat="Hashed"
     maxInvalidPasswordAttempts="5"
     minRequiredPasswordLength="6"
     minRequiredNonalphanumericCharacters="0"
     passwordAttemptWindow="10"
     passwordStrengthRegularExpression=""
     applicationName="/" />
  </providers>
</membership>
Run Code Online (Sandbox Code Playgroud)

获取AccountController和Views工作:

  1. 删除MVC 4 AccountController,AccountModels,Account视图文件夹和_LoginPartial共享视图
  2. 创建一个新的MVC 3 Web应用程序
  3. 将MVC 3 AccountController,AccountModels,Account视图文件夹和_LogOnPartial共享视图复制到MVC 4应用程序中
  4. @Html.Partial(“_LoginPartial”)在共享_Layout视图中替换为@Html.Partial(“_LogOnPartial”)

  • SimpleMembership提供程序(由MVC 4帐户实现使用)不完全与数据库无关,并且其中包含一些MS Sql Server特定语法,这些语法排除非Sql Server数据库... (2认同)