Entity Framework Code First For MySql 之数据库迁移

   

    这里只上干货~!

  • 首先我们需要下载安装

  

     这里是下载地址拿去不谢~! https://downloads.mysql.com/archives/ 。什么找不到软件?小弟只能帮大哥到这里了。

  •  接着创建一个项目DEMO4:

        

  

 

  • 新建项目,创建ADO.NET实体数据模型,注意最好命名一个DbContext后缀的类,但是随你~!

  ,

  

  

   

 1 namespace DEMO4
 2 {
 3     using System;
 4     using System.Data.Entity;
 5     using System.Linq;
 6 
 7     public class Model1 : DbContext
 8     {
 9         //您的上下文已配置为从您的应用程序的配置文件(App.config 或 Web.config)
10         //使用“Model1”连接字符串。默认情况下,此连接字符串针对您的 LocalDb 实例上的
11         //“DEMO4.Model1”数据库。
12         // 
13         //如果您想要针对其他数据库和/或数据库提供程序,请在应用程序配置文件中修改“Model1”
14         //连接字符串。
15         public Model1()
16             : base("name=Model1")
17         {
18         }
19 
20         //为您要在模型中包含的每种实体类型都添加 DbSet。有关配置和使用 Code First  模型
21         //的详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkId=390109
22 
23         public virtual DbSet<MyEntity> MyEntities { get; set; }
24     }
25 
26     public class MyEntity
27     {
28         public int Id { get; set; }
29         public string Name { get; set; }
30     }
31 }

    将注释掉的内容去掉注释。

  • 接下来我们运行命令喽:

    第一个命令 Enable-Migrations -EnableAutomaticMigrations

    来了,问题终于来了……    

正在检查上下文的目标是否为现有数据库...
System.InvalidOperationException: 无法为具有固定名称“MySql.Data.MySqlClient”的 ADO.NET 提供程序加载在应用程序配置文件中注册的实体框架提供程序类型“MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.9.12.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d”。请确保使用限定程序集的名称且该程序集对运行的应用程序可用。有关详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkId=260882。
在 System.Data.Entity.Infrastructure.DbContextInfo.CreateInstance()
在 System.Data.Entity.Infrastructure.DbContextInfo..ctor(Type contextType, DbProviderInfo modelProviderInfo, AppConfig config, DbConnectionInfo connectionInfo, Func`1 resolver)
在 System.Data.Entity.Migrations.DbMigrator..ctor(DbMigrationsConfiguration configuration, DbContext usersContext, DatabaseExistenceState existenceState, Boolean calledByCreateDatabase)
在 System.Data.Entity.Migrations.DbMigrator..ctor(DbMigrationsConfiguration configuration)
在 System.Data.Entity.Migrations.Design.MigrationScaffolder..ctor(DbMigrationsConfiguration migrationsConfiguration)
在 System.Data.Entity.Migrations.Design.ToolingFacade.ScaffoldRunner.RunCore()
在 System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.Run()
无法为具有固定名称“MySql.Data.MySqlClient”的 ADO.NET 提供程序加载在应用程序配置文件中注册的实体框架提供程序类型“MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.9.12.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d”。请确保使用限定程序集的名称且该程序集对运行的应用程序可用。有关详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkId=260882。

    遇到问题不怕看不懂就怕你急躁,越急躁越不能解决问题。上面的描述告诉我们,缺少“MySql.Data.MySqlClient”,EF怎么知道我要连接的是MYSQL数据库的呢?别去管他,也许是我本机并未安装SQL SERVER。

    接下来,我们安装MySql.Data.Entity  6.9.12 ,并修改App.config。

    

    

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <configuration>
 3   <configSections>
 4     <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
 5     <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
 6   </configSections>
 7   <entityFramework>
 8     <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
 9     <providers>
10       <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.9.12.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"/>
11       <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
12     </providers>
13   </entityFramework>
14   <connectionStrings>
15     <add name="Model1" connectionString="data source=127.0.0.1;initial catalog=DEMO4.Model1;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="MySql.Data.MySqlClient" />
16   </connectionStrings>
17 <system.data>
18     <DbProviderFactories>
19       <remove invariant="MySql.Data.MySqlClient" />
20       <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.9.12.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
21     </DbProviderFactories>
22   </system.data>
23 </configuration>

      接下来,再执行一下命令 Enable-Migrations -EnableAutomaticMigrations,问题又来了,不过这个问题倒是好解决。

        已在项目“DEMO4”中启用迁移。若要覆盖现有迁移配置,请使用 -Force 参数。

      将命令 Enable-Migrations -EnableAutomaticMigrations 换成 Enable-Migrations -EnableAutomaticMigrations -Force,运行命令,问题又来了

        Keyword not supported.

        参数名: multipleactiveresultsets

      连接语句不支持参数multipleactiveresultsets,咋办,去掉呗~!再运行     Enable-Migrations -EnableAutomaticMigrations -Force

        Keyword not supported.
        参数名: app

       去掉去掉~!再运行     Enable-Migrations -EnableAutomaticMigrations -Force   这次终于没毛病了~! App.config内容如下:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <configuration>
 3   <configSections>
 4     <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
 5     <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
 6   </configSections>
 7   <entityFramework>
 8     <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
 9     <providers>
10       <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.9.12.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"/>
11       <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
12     </providers>
13   </entityFramework>
14 
15 <system.data>
16     <DbProviderFactories>
17       <remove invariant="MySql.Data.MySqlClient" />
18       <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.9.12.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
19     </DbProviderFactories>
20 
21   </system.data>
22   <connectionStrings>
23     <add name="Model1" connectionString="data source=127.0.0.1;initial catalog=Model1;integrated security=True" providerName="MySql.Data.MySqlClient" />
24   </connectionStrings>
25 </configuration>

      

      

      接下来执行命令  Add-Migration InitialCreate,好吧,问题又来了:

        未为提供程序“MySql.Data.MySqlClient”找到任何 MigrationSqlGenerator。请在目标迁移配置类中使用 SetSqlGenerator 方法以注册其他 SQL 生成器。

      在Model1.cs中添加

        [DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]   

      构造函数中添加

        public Model1(): base("name=Model1")
        {
          System.Data.Entity.Database.SetInitializer(new DropCreateDatabaseIfModelChanges<Model1>());
          DbConfiguration.SetConfiguration(new MySql.Data.Entity.MySqlEFConfiguration());
        }

 1 namespace DEMO4
 2 {
 3     using System;
 4     using System.Data.Entity;
 5     using System.Linq;
 6     [DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]
 7     public class Model1 : DbContext
 8     {
 9         //您的上下文已配置为从您的应用程序的配置文件(App.config 或 Web.config)
10         //使用“Model1”连接字符串。默认情况下,此连接字符串针对您的 LocalDb 实例上的
11         //“DEMO4.Model1”数据库。
12         // 
13         //如果您想要针对其他数据库和/或数据库提供程序,请在应用程序配置文件中修改“Model1”
14         //连接字符串。
15         public Model1()
16             : base("name=Model1")
17         {
18             System.Data.Entity.Database.SetInitializer(new DropCreateDatabaseIfModelChanges<Model1>());
19             DbConfiguration.SetConfiguration(new MySql.Data.Entity.MySqlEFConfiguration());
20         }
21 
22         //为您要在模型中包含的每种实体类型都添加 DbSet。有关配置和使用 Code First  模型
23         //的详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkId=390109
24 
25         public virtual DbSet<MyEntity> MyEntities { get; set; }
26     }
27 
28     public class MyEntity
29     {
30         public int Id { get; set; }
31         public string Name { get; set; }
32     }
33 }

        接下来执行命令  Add-Migration InitialCreate,成功时这个样子滴。生成了一个201812040228323_InitialCreate.cs 文件

      

      

        接下来执行命令  Add-Migration InitialCreate,问题又来了

          Access denied for user ''@'localhost' to database 'model1'

         没有账户密码……修改App.config文件如下:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
    <providers>
      <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.9.12.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"/>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>

<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, Version=6.9.12.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
    </DbProviderFactories>

  </system.data>
  <connectionStrings>
    <add name="Model1" connectionString="data source=127.0.0.1;initial catalog=Model1;integrated security=True;user id=root;password=123456;port=3306" providerName="MySql.Data.MySqlClient" />
  </connectionStrings>
</configuration>

      

      

      接下来我们 添加一个表 MyEntity2

namespace DEMO4
{
    using System;
    using System.Data.Entity;
    using System.Linq;
    [DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]
    public class Model1 : DbContext
    {
        //您的上下文已配置为从您的应用程序的配置文件(App.config 或 Web.config)
        //使用“Model1”连接字符串。默认情况下,此连接字符串针对您的 LocalDb 实例上的
        //“DEMO4.Model1”数据库。
        // 
        //如果您想要针对其他数据库和/或数据库提供程序,请在应用程序配置文件中修改“Model1”
        //连接字符串。
        public Model1()
            : base("name=Model1")
        {
            System.Data.Entity.Database.SetInitializer(new DropCreateDatabaseIfModelChanges<Model1>());
            DbConfiguration.SetConfiguration(new MySql.Data.Entity.MySqlEFConfiguration());
        }

        //为您要在模型中包含的每种实体类型都添加 DbSet。有关配置和使用 Code First  模型
        //的详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkId=390109

        public virtual DbSet<MyEntity> MyEntities { get; set; }
        public virtual DbSet<MyEntity2> MyEntities2 { get; set; }
    }

    public class MyEntity
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }

    public class MyEntity2
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }
}
      接下来执行命令 Add-Migration MyEntity2 

      

      

      接下来执行命令 Update-Database -Verbose

 

转载于:https://www.cnblogs.com/bjxingch/articles/10062741.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值