.net EF框架 MySql实现实例
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了.net EF框架 MySql实现实例,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5926字,纯文字阅读大概需要9分钟。
内容图文
![.net EF框架 MySql实现实例](/upload/InfoBanner/zyjiaocheng/1191/dbde9d84bf744fd98f2a7c4819dd79e0.jpg)
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类
1 using System; 2 using System.ComponentModel.DataAnnotations; 3 using System.ComponentModel.DataAnnotations.Schema; 4 5 namespace EFCodeFirst.Entity 6 { 7 [Table("user")] 8publicclass AccountUser 9 { 10///<summary>11/// 用户ID 12///</summary>13 [Column("ID")] 14 [Key] 15publicint AccountUserId { get; set; } 1617///<summary>18/// 用户名 19///</summary>20publicstring Name { get; set; } 2122///<summary>23/// 年龄 24///</summary>25public Nullable<int> Age { get; set; } 2627///<summary>28/// 性别 29///</summary>30public Nullable<bool> Sex { get; set; } 3132 } 33 }
注:特性“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>publicstring ProviceName { get; set; } ///<summary>/// 省份下城市 ///</summary>public List<City> Citys { get; set; } } publicclass City { ///<summary>/// 城市ID ///</summary>publicint CityId { get; set; } ///<summary>/// 所属省份ID ///</summary>publicint ProviceId { get; set; } ///<summary>/// 城市名称 ///</summary>publicstring 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配置 protectedoverridevoid 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是可以同时使用的,但同效果的配置只需要在二者之一中配置就好。
原文:http://www.cnblogs.com/pengdylan/p/6383733.html
内容总结
以上是互联网集市为您收集整理的.net EF框架 MySql实现实例全部内容,希望文章能够帮你解决.net EF框架 MySql实现实例所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。