看了很多文章,尝试了很多次总是进行不下去,整理一下,以便日后查看。
1、创建ASP.NET MVC项目(EFCodeFirst)
1.1、右键点击引用选择管理NuGet程序包下载MySql.Data.Entity.dll(有依懒项,会自动下载MySql.Data.dl 和 EntityFramework.dll)
1.2、修改Web.config文件(如下图)
2、创建类库(EFCodeFirst.DataAccess)
2.1、右键添加-->新建项-->选择数据-->选择ADO.NET实体数据模型-->空Code First模型(也可以不用这一步,但DatabaseAccess.cs文件需要自己创建)
2.1、右键点击引用选择管理NuGet程序包下载MySql.Data.Entity.dll(有依懒项,会自动下载MySql.Data.dl 如下图)
2.2、修改文件 DatabaseAccess.cs
修改之前:
修改之后:
代码如下:
namespaceEFCodeFirst.DataAccess
{usingIdentityAuth.Common;usingIdentityAuth.Model.Sys;usingMySql.Data.MySqlClient;usingSystem;usingSystem.Data.Common;usingSystem.Data.Entity;usingSystem.Linq;public classDatabaseAccess : DbContext
{#region 构造函数和初始化
private static string connectionStr { get; set; }private staticDbConnection GetConnection()
{
if(String.IsNullOrEmpty(connectionStr))
connectionStr= ConfigHelper.GetConnectionStr("EFCodeFirst");
if(String.IsNullOrEmpty(connectionStr))throw new Exception("数据库连接字符串为空,请在Config文件里配置");
DbConnection dbConnection= new MySqlConnection() { ConnectionString =connectionStr };returndbConnection;
}public DatabaseAccess() : base(DatabaseAccess.GetConnection(), true)
{
Database.SetInitializer(null);
}#endregion
#region 系统表
///
///系统用户信息///
public DbSet UserEntities { get; set; }///
///角色信息///
public DbSet RoleEntities { get; set; }///
///系统菜单信息///
public DbSet MenuEntities { get; set; }///
///角色权限信息///
public DbSet RoleAuthEntities { get; set; }///
///角色用户信息///
public DbSet RoleUserEntities { get; set; }#endregion}
}
2.3、修改App.config文件(如下图)
App.config文件如下:
3、迁移
3.1、打开程序包管理控制器,默认项目选择 EFCodeFirst.DataAccess(也就是CodeFirst迁移目录,如下图)
3.2、添加迁移配置 Enable-Migrations(生成以下文件并会出现错误,如图)
3.3、解决3.2出现的错误,修改生成文件 Configuration.cs(如下图)
代码如下:
namespaceEFCodeFirst.DataAccess.Migrations
{usingSystem;usingSystem.Data.Common;usingSystem.Data.Entity;usingSystem.Data.Entity.Migrations;usingSystem.Data.Entity.Migrations.History;usingSystem.Linq;internal sealed class Configuration : DbMigrationsConfiguration{publicConfiguration()
{
AutomaticMigrationsEnabled= false;
SetSqlGenerator("MySql.Data.MySqlClient", newMySql.Data.Entity.MySqlMigrationSqlGenerator());
SetHistoryContextFactory("MySql.Data.MySqlClient", (conn, schema) => newMySqlHistoryContext(conn, schema));
}protected override voidSeed(EFCodeFirst.DataAccess.DatabaseAccess context)
{//This method will be called after migrating to the latest version.//You can use the DbSet.AddOrUpdate() helper extension method//to avoid creating duplicate seed data.
}
}public classMySqlHistoryContext : HistoryContext
{public MySqlHistoryContext(DbConnection connection, stringdefaultSchema)
:base(connection, defaultSchema)
{}protected override voidOnModelCreating(DbModelBuilder modelBuilder)
{base.OnModelCreating(modelBuilder);
modelBuilder.Entity().Property(h => h.MigrationId).HasMaxLength(100).IsRequired();
modelBuilder.Entity().Property(h => h.ContextKey).HasMaxLength(200).IsRequired();
}
}
}
3.4、添加一个合并迁移命令行:Add-Migration [Name](eg:Add-Migration Add_Base_Table) Name 为一个合并的名称,自定义,最好不重复
3.5、生成SQL:Update-Database -Script(如果不需要SQL可不用执行)
3.6、迁移到数据库:Update-Database