[EF]vs15+ef6+mysql code first方式

写在前面

前面有篇文章,尝试了db first方式,但不知道是什么原因一直没有成功,到最后也没解决,今天就尝试下code first的方式。

[EF]vs15+ef6+mysql这个问题,你遇到过么?

一个例子

步骤

  1. mysql-for-visualstudio-1.2.4.msi 下载该文件,然后运行安装(如果没安装,请先安装)。
  2. Connector/Net 下载该文件,并安装(如果没安装,请先安装)
  3. 使用Nuget安装EF
  4. 使用Nuget安装mysql提供程序。

在上面的步骤完成后,修改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>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
  </startup>
  <entityFramework codeConfigurationType="MySql.Data.Entity.MySqlEFConfiguration, MySql.Data.Entity.EF6">
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="mssqllocaldb" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.9.7.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
    </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.7.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
    </DbProviderFactories>
  </system.data>
  <connectionStrings>
    <add name="MyContext" connectionString="Data Source=localhost;port=3306;Initial Catalog=myshop;user id=sa;password=sa;" providerName="MySql.Data.MySqlClient"/>
  </connectionStrings>
</configuration>

注意entityFramework 节点,默认是不会有codeConfigurationType属性的,请添加。否则会出现下面的错误:Specified key was too long; max key length is 767 bytes

测试

实体类

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Wolfy.Ef_MySql_CodeFirst
{
    public class Product
    {
        public int Id { set; get; }
        [MaxLength(128)]
        public string Name { set; get; }
        [MaxLength(128)]
        public string Category { set; get; }
        public decimal Price { set; get; }
        public DateTime CreateDate { set; get; }
    }
}

插入信息

using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Wolfy.Ef_MySql_CodeFirst
{
    class Program
    {
        static void Main(string[] args)
        {
            var dbContext = new MyContext();
            IDatabaseInitializer<MyContext> dbInitializer = null;
            if (dbContext.Database.Exists())
            {
                //如果数据库已经存在
                dbInitializer = new DropCreateDatabaseIfModelChanges<MyContext>();
            }
            else
            {
                //总是先删除然后再创建
                dbInitializer = new DropCreateDatabaseAlways<MyContext>();
            }
            //Database.SetInitializer(dbInitializer);
            dbInitializer.InitializeDatabase(dbContext);
            dbContext.Products.Add(new Product() { CreateDate = DateTime.Now.AddDays(1), Name = "南孚电池", Category = "生活用品", Price = 3 });
            dbContext.SaveChanges();
        }
    }
}

还有一个错误经常出现

Model compatibility cannot be checked because the database does not contain model metadata. Model compatibility can only be checked for databases created using Code First or Code First Migrations.

大概意思是:不能检查模型的兼容性,因为数据库不包含模型元数据。在使用code first或者code fisrt迁移进行数据库创建的时候需要检查模型的兼容性。

此时,虽然生成了表_migrationhistory,但是该表内容为空。

这个时候可以将数据库删除,重新生成就可以解决。

其中表_migrationhistory为创建历史表。

Products表

发现添加的数据中中文为乱码,这是因为mysql默认的字符集为latin

关于乱码的解决方案很多,你可以修改数据库的字符集,或者数据表的字符集。也可以这样,修改连接字符串:

  <connectionStrings>
    <add name="MyContext" connectionString="Data Source=localhost;port=3306;Initial Catalog=myshop;user id=sa;password=sa;charset=utf8" providerName="MySql.Data.MySqlClient"/>
  </connectionStrings>

 总结

折腾了一上午,一个简单的demo出来了。

时间: 2024-08-08 13:53:01

[EF]vs15+ef6+mysql code first方式的相关文章

[EF]vs5+ef6+mysql这个问题,你遇到过么?

写在前面 因为最近用mysql比较多,所以想了解下ef+mysql的内容,发现ef连接mysql数据库,还有那么一段路折腾.折腾到最后,发疯了. 步骤 这里采用db first的方式来使用ef. 通过上面的图,你会发现vs并没默认添加mysql数据提供程序,为了能在这里看到mysql提供程序,需要下面几个步骤. mysql-for-visualstudio-1.2.4.msi下载该文件,然后运行安装. 使用Nuget安装EF 使用Nuget提供程序. 上面的步骤完成后,你查看下web.confi

EF6+Mysql Code first

1.需要去官方下载Mysql Connect/.net驱动,地址:http://cdn.mysql.com//Downloads/Connector-Net/mysql-connector-net-6.9.9.msi 2.新建一个简单的项目,引用一下文件: 3.启用数据迁移:enable-migrations -force 会提示一下错误,需要修改配置文件,按照一下步骤处理 3.1注释掉默认的provider,如果没有则手工添加 <providers> <provider invaria

[实战]MVC5+EF6+MySql企业网盘实战(6)——ajax方式登录

写在前面 今天回来的比较早,就趁着有空,把登录的代码更新一下.上篇文章实现了ajax的注册,这篇将实现登录,实现目标,ajax登录方式,如果勾选记住我,则下次不再输入用户名密码,直接跳转到网盘界面. 系列文章 [EF]vs15+ef6+mysql code first方式 [实战]MVC5+EF6+MySql企业网盘实战(1) [实战]MVC5+EF6+MySql企业网盘实战(2)——用户注册 [实战]MVC5+EF6+MySql企业网盘实战(3)——验证码 [实战]MVC5+EF6+MySql

[实战]MVC5+EF6+MySql企业网盘实战(5)——ajax方式注册

写在前面 今天贴合到实际的客户需求仔细的想了下,其实在userInfo这个类里面很多字段都不是必须的.有很多的事业单位根本就不能上网,填写的邮箱也是exchange的,个人的详细信息都在ad里面可以取到,再这里重新注册一次确实没有必要.所以对注册的字段重新筛选了一下.对于目前大多数网站来说,要么就是采用第三方的登录方式,要么就是非常简单的注册方式,对我本人来说,如果非必要,我喜欢第三方的登录方式.当然,简单的注册信息,可以更方便用户,也可以在用户注册后,为用户提供积分系统等让用户完善个人资料来增

[实战]MVC5+EF6+MySql企业网盘实战(23)——文档列表

写在前面 上篇文章实现了图片列表,这篇文章实现文档列表将轻车熟路,因为逻辑基本相似,只是查询条件的不同.这里将txt,doc,docx,ppt,pptx,xls,xlsx的文件都归为文档列表中. 系列文章 [EF]vs15+ef6+mysql code first方式 [实战]MVC5+EF6+MySql企业网盘实战(1) [实战]MVC5+EF6+MySql企业网盘实战(2)——用户注册 [实战]MVC5+EF6+MySql企业网盘实战(3)——验证码 [实战]MVC5+EF6+MySql企业

[实战]MVC5+EF6+MySql企业网盘实战(13)——思考

写在前面 从上面更新编辑文件夹,就一直在思考一个问题,之前做的编辑文件名已经文件夹名称,只是逻辑上的修改,但是保存的物理文件或者文件夹名称并没有进行修改,这样就导致一个问题,就是在文件或者文件夹修改名称后就会找不到物理文件,因为路径或者文件名错误了.所以就有了这篇文章的思考.当然,修改物理文件确实能实现,但是会频繁的操作io,性能会非常的差,如果一个文件非常大,你可想而知这种效率有多么底下. 系列文章 [EF]vs15+ef6+mysql code first方式 [实战]MVC5+EF6+My

[实战]MVC5+EF6+MySql企业网盘实战(9)——编辑文件名

写在前面 上篇文章实现了文件的下载,本篇文章将实现编辑文件名的功能. 系列文章 [EF]vs15+ef6+mysql code first方式 [实战]MVC5+EF6+MySql企业网盘实战(1) [实战]MVC5+EF6+MySql企业网盘实战(2)——用户注册 [实战]MVC5+EF6+MySql企业网盘实战(3)——验证码 [实战]MVC5+EF6+MySql企业网盘实战(4)——上传头像 [Bootstrap]modal弹出框 [实战]MVC5+EF6+MySql企业网盘实战(5)——

[实战]MVC5+EF6+MySql企业网盘实战(22)——图片列表

写在前面 实现逻辑是:单击图片节点,加载所有的当前用户之前上传的图片,分页,按时间倒序加载. 系列文章 [EF]vs15+ef6+mysql code first方式 [实战]MVC5+EF6+MySql企业网盘实战(1) [实战]MVC5+EF6+MySql企业网盘实战(2)——用户注册 [实战]MVC5+EF6+MySql企业网盘实战(3)——验证码 [实战]MVC5+EF6+MySql企业网盘实战(4)——上传头像 [Bootstrap]modal弹出框 [实战]MVC5+EF6+MySq

[实战]MVC5+EF6+MySql企业网盘实战(19)——BJUI和ztree

写在前面 上周在博客园看到一篇通用权限系统的文章,看到他那个UI不错,这里就研究了一下,将网盘的UI修改为他的那个,感兴趣的可以参考:http://b-jui.com/ 系列文章 [EF]vs15+ef6+mysql code first方式 [实战]MVC5+EF6+MySql企业网盘实战(1) [实战]MVC5+EF6+MySql企业网盘实战(2)——用户注册 [实战]MVC5+EF6+MySql企业网盘实战(3)——验证码 [实战]MVC5+EF6+MySql企业网盘实战(4)——上传头像