在EF中使用MySQL的方法及常见问题

发表于:2016-6-29 10:05

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:xiaof2000    来源:51Testing软件测试网采编

  有时需要在网上租用空间或数据库Mysql成本低一些,所以想将sql server转成mysql……
  注意:在安装Mysql时要选择文字集为utf8,否则将不能使用中文(当前也可以在创建数据库时使用utf8,不过我不知道在ef生成数据库时如何设置,希望高手指点)
  一、在项目中引用mysql的EF包
  通过NuGet包管理器安装:EntityFramework6.1.3、MySql.Data.Entity6.9.8
  也可以用nuget的命令行加入:
  Install-Package MySql.Data.Entity
  二、新建相关类
  1、新建 User 实体类
  并定义实例的字段长度,不定义的话会出现Specified key was too long;max key length is 767 bytes 的错误,这是因为string 类型直接映射到mysql 中的话是longtext,而mysql 支持最大长度为767 bytes.
  public class User
  {
  public int Id { get; set; }
  [StringLength(30)]
  public string UserName { get; set; }
  [MaxLength(30)]
  public string PassWord { get; set; }
  }
  2、新建 MyContext 类
  并说明用MySql进行实现 [DbConfigurationType(typeof(MySqlEFConfiguration))]
  [DbConfigurationType(typeof(MySqlEFConfiguration))]
  public class MyContext : DbContext
  {
  public MyContext()
  : base("name=MyContext")//web.config中connectionstring的名字
  {
  }
  public DbSet<User> Users { get; set; }
  }
  3、写测试代码
  Database.SetInitializer(new DropCreateDatabaseIfModelChanges<MyContext>());
  var context = new MyContext();
  //插入一行值
  context.Users.Add(new User { UserName = "EF6MySQL" });
  context.SaveChanges();
  三、配置Web.config
  在<connectionStrings>中加入以下代码:
  <add name="MyContext" connectionString="Data Source=localhost;port=3306;Initial Catalog=MySQL_EF;user id=root;password=root;" providerName="MySql.Data.MySqlClient" />
  完整的web.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="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.9.8.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d">
</provider>
</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.8.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
</DbProviderFactories>
</system.data>
<connectionStrings>
<add name="MyContext" connectionString="Data Source=localhost;port=3306;Initial Catalog=MySQL_EF;user id=root;password=root;" providerName="MySql.Data.MySqlClient" />
</connectionStrings>
</configuration>
  最后,运行程序,完成数据库自动创建
21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号