请选择 进入手机版 | 继续访问电脑版

无忧编程_ASP.NET  / C# / PHP 程序员的软件世界

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3940|回复: 0

mvc5+ef6+Identity使用mysql的步骤详解

[复制链接]

423

主题

456

帖子

1899

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1899
发表于 2016-5-21 12:50:42 | 显示全部楼层 |阅读模式
mvc5+ef6+Identity使用mysql的步骤详解:第一步,vs2013连接mysql
http://www.5uhack.com/thread-126-1-1.html

第二步,项目中references点右键, add reference
选择 Mysql.data 以及 Mysql.data.Entity.EF6
注意,应该有好几个版本的,鼠标移上去,会显示属于.net 2 ,.net4,.net4.5 按需选择,我选择了4.5

第三步,菜单 tools中 Nuget Package Manager 中选择 Package Manager Console
在最下方出现的 pm>
中输入 enable-migrations
完成后显示以下界面 (测试项目名称为aspmvc)
PM> enable-migrations
Checking if the context targets an existing database...
Code First Migrations enabled for project aspmvc.
PM>

第四步,项目中生成的Migrations目录
新建类 MySqlHistoryContext.cs

using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Data.Entity;
using System.Data.Entity.Migrations.History;
using System.Linq;
using System.Web;

namespace aspmvc.Migrations
{
public class MySqlHistoryContext : HistoryContext
{
public MySqlHistoryContext(DbConnection connection, string defaultSchema)
: base(connection, defaultSchema)
{

}

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<HistoryRow>().Property(h => h.MigrationId).HasMaxLength(100).IsRequired();
modelBuilder.Entity<HistoryRow>().Property(h => h.ContextKey).HasMaxLength(200).IsRequired();
}
}
}

第五步,Migrations目录下Configuration.cs
在public Configration()
中添加
AutomaticMigrationsEnabled = false; //此行原本就有
SetSqlGenerator("MySql.Data.MySqlClient", new MySql.Data.Entity.MySqlMigrationSqlGenerator());
SetHistoryContextFactory("MySql.Data.MySqlClient", (conn, schema) => new MySqlHistoryContext(conn, schema));

并添加方法
protected override void Seed(aspmvc.Models.ApplicationDbContext context)
{

}
最终如下
namespace aspmvc.Migrations
{
using System;
using System.Data.Entity;
using System.Data.Entity.Migrations;
using System.Linq;

internal sealed class Configuration : DbMigrationsConfiguration
{
public Configuration()
{
AutomaticMigrationsEnabled = false;
SetSqlGenerator("MySql.Data.MySqlClient", new MySql.Data.Entity.MySqlMigrationSqlGenerator());

SetHistoryContextFactory("MySql.Data.MySqlClient", (conn, schema) => new MySqlHistoryContext(conn, schema));
}

protected override void Seed(aspmvc.Models.ApplicationDbContext context)
{
  
}
}
}

第六步,项目根目录下建立 MySqlInitializer.cs
using System;
using aspmvc.Models;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
using System.Linq;

namespace aspmvc
{
public class MySqlInitializer : IDatabaseInitializer<ApplicationDbContext>
{
public void InitializeDatabase(ApplicationDbContext context)
{
if (!context.Database.Exists())
{
// if database did not exist before - create it
context.Database.Create();
}
else
{
// query to check if MigrationHistory table is present in the database
var migrationHistoryTableExists = ((IObjectContextAdapter)context).ObjectContext.ExecuteStoreQuery<int>(
string.Format(
"SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = '{0}' AND table_name = '__MigrationHistory'",
"aspmvc"));

// if MigrationHistory table is not there (which is the case first time we run) - create it
if (migrationHistoryTableExists.FirstOrDefault() == 0)
{
context.Database.Delete();
context.Database.Create();
}
}
}
}
}

注意修改红色表名

第七步,修改Models下的 IdentityModels.cs
public class ApplicationDbContext : IdentityDbContext
{
public ApplicationDbContext()
: base("mydbContext", throwIfV1Schema: false)
{
Database.SetInitializer(new MySqlInitializer());
}

public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}
}
注意红色为你在web.config中配置 的mysql连接名称。

F5运行项目,点击登录,随便输入一个用户名密码,
进入MYSQL中发现已建立相应表,
开始注册


目前你处于code first
即你改变Models ,将对数据库产生作用,在传统建表优先的模式下可能有些不适.
那你可以先按习惯建立表结构,甚至添加数据,然后使用  ef power tool
https://visualstudiogallery.msdn ... -89f2-846072eff19d/
下载后会直接自动安装 ,重启vs2013,
打开aspmvc项目 ,右键点击



选择 Reverse Engineer Code First
其会让你输入数据库的相关信息,
根据你的数据结构,自动 生成Models下的实体model
每次更改数据结构时,都可以使用这个方法生成model,生成的model会覆盖原有的,因此
自定义代码,全另外建ViewModel目录,写成viewModel,生成的代码不去改动

windows .net(C#+MSSQL) linux(php+mysql)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|软件编程 ( 鄂ICP备11006601号 )鄂公网安备 42011102001337号 |

GMT+8, 2019-9-20 01:49 , Processed in 0.064772 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表