Net EF框架+ MySql示例
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 = 29
};
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示例相关推荐
- c ef框架-mysql_.net EF框架 MySql實現實例
1.nuget中添加包EF和MySql.Data.Entity 2.config文件添加如下配置 1.配置entitframework節點(一般安裝EF時自動添加) 2.配置system.data節點 ...
- .net EF框架 MySql实现实例
1.nuget中添加包EF和MySql.Data.Entity 2.config文件添加如下配置 1.配置entitframework节点(一般安装EF时自动添加) <entityFramewo ...
- ef框架链接mysql数据库_.net EF框架 MySql实现实例
1.nuget中添加包EF和MySql.Data.Entity 2.config文件添加如下配置 1.配置entitframework节点(一般安装EF时自动添加) 2.配置system.data节点 ...
- (Entity Framework) EF框架简单示例用法
EF框架是微软推出的用于与数据库交互的组件,这里简单列出一些常用用法,代码来源于<EF6-DBFirst-Demo>. 向数据库增加.修改.删除一条新记录的写法 using (var co ...
- c# ef报错_C# EF调用MySql出现“未将对象引用设置到对象的实例”错误解决方案
C# EF调用MySql出现"未将对象引用设置到对象的实例"错误解决方案---修改步骤---1.打开Nuget管理包,把Mysql.Data替换为6.10.0以下任意版本.这里选择 ...
- OpenCL框架与示例
OpenCL框架与示例 下面的图简单说明了OpenCL的编程框架,图是用的GPU,其他类似: 名词的概念: Platform (平台):主机加上OpenCL框架管理下的若干设备构成了这个平台,通过这个 ...
- .NET EF框架的安装、及三种开发模式
一.EF框架的安装: 要在VS(如Visual Studio 2012)中使用EF框架,就需要先进行安装. 我们需要给这个应用安装EntityFramework包,引入EF框架相关的内容,我们需要引入 ...
- 安装MySQL示例 docker pull mysql
安装MySQL示例 docker pull mysql 错误的启动 docker run --name mysql01 -d mysql 正确的启动 docker run --name mys ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理(附源码)
前言目录 前言:时间很快,已经快到春节的时间了,这段时间由于生病,博客基本没更新,所以今天写一下我们做的一个项目吧,是对权限的基本操作的操作,代码也就不怎么说了,直接上传源码和图片展示,下面我们直接进 ...
最新文章
- SAP质量管理模块常见问题及解决方案
- python 模拟用户点击浏览器_Python-模拟浏览器-下载文献
- BZOJ 1046: [HAOI2007]上升序列【贪心+二分状态+dp+递归】
- 东软睿云用户认证_【硬件资讯】尘埃落定!11代酷睿规格曝光!i7、i9难分差距,退回8核16线程!...
- Sublime Text3 多行合并为一行
- 开源 RPC 框架有哪些
- 关于opencv设置视频的属性无效问题
- Luogu P5201 [USACO19JAN]Shortcut 最短路树???
- 信息系统管理工程师考前复习笔记一
- 同济版《工程数学:线性代数》60条笔记全整理
- 梦飞苍穹c语言答案,梦飞仙途-楔子一 决战苍穹之巅-汤圆创作
- 华盛顿大学计算机专业咋样,华盛顿大学计算机专业详解
- 中国公交广告高峰论坛——天津
- 关于经典面试一年多少秒的思考!启发#define与UL!
- Centos7中病毒排查[tsm][kswapd0]
- python中文聊天_Python下两种曲线救国实现AIML中文聊天机器人功能的方法
- 推荐串口监视软件——Serial Monitor Professional
- Android:技术在线面试还是屡次撞板,过来人告诉你不及时
- 面试某AGV大厂 算法工程师总结
- 30个特别酷的SharePoint站点
热门文章
- 使用ros发布UVC相机和串口IMU数据
- 动态加载和静态加载及其编译步骤
- draw_circle_mod预生成交互式圆形
- HALCON示例程序inner_rectangle1.hdev木板有效区域提取
- HALCON示例程序hull.hdev区域提取与凸度筛选
- 学习笔记(19):Python网络编程并发编程-互斥锁
- 优酷视频整段代理php,thinkphp仿优酷带数据源码|php仿优酷视频源码带后台功能强大...
- java .listfiles_Java File.listFiles()
- asynchttpclient 超时_DNF:95更新前还能免费获得一件超时空装备?但这个任务一定完成...
- 第二阶段团队冲刺(七)