1.nuget中添加包EF和MySql.Data.Entity

2.config文件添加如下配置

1.配置entitframework节点(一般安装EF时自动添加)

  <entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="mssqllocaldb" />
</parameters>
</defaultConnectionFactory>
<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.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"></provider>
</providers>
</entityFramework>

2.配置system.data节点(一般安装MySql.Data.Entity时自动添加)

  <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.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
</DbProviderFactories>
</system.data>

3.添加连接串节点(以实际情况修改库名、密码等属性)

  <connectionStrings>
<add name="MyContext" connectionString="Data Source=localhost;port=3306;Initial Catalog=aceadmin;user id=root;password=xxx;" providerName="MySql.Data.MySqlClient" />
</connectionStrings>

3.添加实体类

添加AccountUser类

 using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema; namespace EFCodeFirst.Entity
{
[Table("user")]
public class AccountUser
{
/// <summary>
/// 用户ID
/// </summary>
[Column("ID")]
[Key]
public int AccountUserId { get; set; } /// <summary>
/// 用户名
/// </summary>
public string Name { get; set; } /// <summary>
/// 年龄
/// </summary>
public Nullable<int> Age { get; set; } /// <summary>
/// 性别
/// </summary>
public Nullable<bool> Sex { get; set; } }
}

注:特性“Table”指定数据库中与该实体产生映射的表名,默认不添加系统会去数据库中寻找表名为:“类名+s”的表,找不到会报错。

特性“Column”来指定映射表中的列名,如果属性名与列名相同,则不用添加,系统默认属性名与列名一致。

以上方式为Data Annotations模式(数据注解)映射数据库方法。

EF还提供Fluent API配置来映射数据库,下面会讲到。

4.添加Context实体对象

using System.Data.Entity;

namespace EFCodeFirst
{
public class DContext : DbContext
{
/// <summary>
/// 添加构造函数,name为config文件中数据库连接字符串的name
/// </summary>
public DContext() : base("name=MyContext")
{ } #region 数据集
public DbSet<AccountUser> AccountUsers { get; set; } #endregion
}
}

定义新的上下文类DContext集成DbContext

这里声明了与数据库映射的对象AccountUser,以后可以直接用属性AccountUsers来进行对数据库的操作

注:一定要添加构造函数并指明config文件中数据库连接字符串的name,否则系统将把数据库默认指定到VS自带的数据库中

5.写一个简单的插入数据代码运行看结果

    class Program
{
static void Main(string[] args)
{
try
{
var user = new AccountUser()
{
Name = "Test",
Sex = true,
Age =
};
using (var context = new DContext())
{
context.AccountUsers.Add(user);
context.SaveChanges();
var accountUsers = context.AccountUsers.ToList();
}
Console.Write("{0}", user.AccountUserId);
}
catch (Exception ex)
{
Console.Write("{0}", ex);
}
Console.ReadLine();
}
}

至此EF框架连接MySql数据库已经成功

6.使用Fluent API配置EF映射关系

1.添加新类省、市

    public class Provice
{
/// <summary>
/// 省份ID
/// </summary>
public int ProviceId { get; set; } /// <summary>
/// 省份名
/// </summary>
public string ProviceName { get; set; } /// <summary>
/// 省份下城市
/// </summary>
public List<City> Citys { get; set; }
} public class City
{
/// <summary>
/// 城市ID
/// </summary>
public int CityId { get; set; } /// <summary>
/// 所属省份ID
/// </summary>
public int ProviceId { get; set; } /// <summary>
/// 城市名称
/// </summary>
public string CityName { get; set; } /// <summary>
/// 所属城市
/// </summary>
public Provice ProviceData { get; set; }
}

2.添加Fluent API配置类,继承自EntityTypeConfiguration对象

using System.Data.Entity.ModelConfiguration;

namespace EFCodeFirst
{
public class ProviceConfiguration : EntityTypeConfiguration<Provice>
{
public ProviceConfiguration()
{
ToTable("provice") //映射表
.HasKey(q => q.ProviceId) //指定主键
.HasMany(q => q.Citys).WithRequired(q => q.ProviceData).HasForeignKey(q => q.ProviceId); //配置一对多关系
}
}
}

注:由于这里添加了外键,则必须用WithRequired方法而不能用WithOption方法,否则报错

using System.Data.Entity.ModelConfiguration;

namespace EFCodeFirst
{
public class CityConfiguration : EntityTypeConfiguration<City>
{
public CityConfiguration()
{
ToTable("city")
.HasKey(q => q.CityId)
.Property(q => q.ProviceId).IsRequired();
}
}
}

一对多关系只用在一端配置,provice处配置后不需要在city端再配置

3.将Fluent API配置添加到DContext类中,重写OnModelCreating方法

public class DContext : DbContext
{
/// <summary>
/// 添加构造函数,name为config文件中数据库连接字符串的name
/// </summary>
public DContext() : base("name=MyContext")
{ } #region 数据集
public DbSet<AccountUser> AccountUsers { get; set; }
public DbSet<Provice> Provices { get; set; }
public DbSet<City> Citys { get; set; }
#endregion #region Fluent API配置
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new ProviceConfiguration());
modelBuilder.Configurations.Add(new CityConfiguration());
}
#endregion
}

4.main方法中级联添加省、市

        static void Main(string[] args)
{
try
{
var provice = new Provice
{
ProviceName = "河南省",
Citys = new List<City>()
{
new City() { CityName = "安阳"},
new City() { CityName = "郑州"},
new City() { CityName = "洛阳"},
}
};
using (var context = new DContext())
{
context.Provices.Add(provice);
context.SaveChanges();
var provices = context.Provices.Include("Citys").ToList();
}
Console.Write("{0}", provice.ProviceId);
}
catch (Exception ex)
{
Console.Write("{0}", ex);
} Console.ReadLine();
}

可以看到数据库中同时向省表和市表中添加了相关数据

7.EF的Data Annotations与Fluent API是可以同时使用的,但同效果的配置只需要在二者之一中配置就好。

.net EF框架 MySql实现实例的更多相关文章

  1. Wcf+EF框架搭建实例

    一.最近在使用Wcf创建数据服务,但是在和EF框架搭建数据访问时遇到了许多问题 下面是目前整理的基本框架代码,经供参考使用,源代码地址:http://git.oschina.net/tiama3798 ...

  2. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(6)- EF上下文实例管理

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(6)- EF上下文实例管理 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    ( ...

  3. 自己实现的一个简单的EF框架(反射实现)

    我实现了一个简单的EF框架,主要用于操纵数据库.实现了对数据库的基本操纵--CRUD 这是项目结构 这是一个 core 下的 DLL 写了一个数据库工厂,用于执行sql语句.调用sql语句工厂 写了一 ...

  4. AutoFac实现WebAPI依赖注入(EF以及Mysql)

    什么是依赖注入? 我们以实际的例子来加以介绍 实体如下 public class Product { public int ID { get; set; } public string Name { ...

  5. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(24)-权限组的设计和实现(附源码)(终结)

    ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2):数据库访问层的设计Demo    (3):面向接口编程   (4 ):业务逻辑层的封装    ...

  6. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(23)-设置角色遗留问题和为权限设置角色以及EasyUI Tabs的使用

    ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2):数据库访问层的设计Demo    (3):面向接口编程   (4 ):业务逻辑层的封装    ...

  7. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(22)-为用户设置角色

    ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2):数据库访问层的设计Demo    (3):面向接口编程   (4 ):业务逻辑层的封装    ...

  8. RDIFramework.NET -.NET快速信息化系统开发整合框架 【开发实例 EasyUI】之产品管理(WebForm版)

    RDIFramework.NET—.NET快速开发整合框架 [开发实例]之产品管理(WebForm版) 接上篇:RDIFramework.NET (.NET快速信息化系统开发整合框架) [开发实例]之 ...

  9. RDIFramework.NET-.NET快速信息化系统开发整合框架 【开发实例 EasyUI】之产品管理(MVC版)

    RDIFramework.NET—.NET快速开发整合框架 [开发实例]之产品管理(MVC版) 接上篇:RDIFramework.NET (.NET快速信息化系统开发整合框架) [开发实例]之产品管理 ...

随机推荐

  1. 201621123023《Java程序设计》第6周学习总结

    一.本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图或相关笔记,对面向对象思想进行一个总结. 二.书面作业 1. clone方法 1.1 在te ...

  2. 17、xtrabackup 常用备份功能与选项

    并行备份 > innobackupex -p123123 --parallel=8 /backup 节流备份 > innobackupex -p123123 --throttle=200  ...

  3. “全栈2019”Java第七十七章:抽象内部类与抽象静态内部类详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  4. react学习之路-配制antd-mobile

    经过将近三个月的使用,现在终于在我老大的带领下做完了一个react的项目,感觉还可以,最大的不足就是,对于react中的很多的东西都是掺杂着jq使用来做的,这是最不满意的一点吧,但是开发进度很近,只能 ...

  5. Cookie、Session的具体使用

    定义 保存在客户端浏览器的键值对. 作用场景 1.登录校验 2.保存用户的一些偏好信息 Cookie的查询 查询所有的Cookie信息: request.COOKIES 完整的Cookie信息就是一个 ...

  6. js实现抛物线

    这个是很简单的一种方式,利用了css3的transition属性 <!DOCTYPE html> <html lang="en" style="widt ...

  7. P1979华容道(神仙题)

    题目描述 小 B 最近迷上了华容道,可是他总是要花很长的时间才能完成一次.于是,他想到用编程来完成华容道:给定一种局面, 华容道是否根本就无法完成,如果能完成, 最少需要多少时间. 小 B 玩的华容道 ...

  8. HTML-▲▲video 视频标签全属性详解▲▲

    HTML 5 video 视频标签全属性详解   现在如果要在页面中使用video标签,需要考虑三种情况,支持Ogg Theora或者VP8(如果这玩意儿没出事的话)的(Opera.Mozilla.C ...

  9. dcoker做私有仓库

    在官网上拉取私有仓库的镜像.(官网提供的镜像为:registry) docker  pull  registry 启动镜像,并且映射端口.(启动时加-p参数即可) docker -d  -p 5000 ...

  10. 7. JavaScript学习笔记——DOM

    7. DOM 7.1 DOM简介 DOM是文档对象模型,HTML文档的所有内容都是节点: 整个文档是一个文档节点 (document 最顶级) HTML元素内的文本是文本节点 每个表面的属性是属性节点 ...