700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > ef框架链接mysql数据库_.net EF框架 MySql实现实例

ef框架链接mysql数据库_.net EF框架 MySql实现实例

时间:2023-09-24 09:56:07

相关推荐

ef框架链接mysql数据库_.net EF框架 MySql实现实例

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

2.config文件添加如下配置

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

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

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

3.添加实体类

添加AccountUser类

1 usingSystem;2 ponentModel.DataAnnotations;3 ponentModel.DataAnnotations.Schema;4

5 namespaceEFCodeFirst.Entity6 {7 [Table("user")]8 public classAccountUser9 {10 ///

11 ///用户ID12 ///

13 [Column("ID")]14 [Key]15 public int AccountUserId { get; set; }16

17 ///

18 ///用户名19 ///

20 public string Name { get; set; }21

22 ///

23 ///年龄24 ///

25 public Nullable Age { get; set; }26

27 ///

28 ///性别29 ///

30 public Nullable Sex { get; set; }31

32 }33 }

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

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

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

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

4.添加Context实体对象

usingSystem.Data.Entity;namespaceEFCodeFirst

{public classDContext : DbContext

{///

///添加构造函数,name为config文件中数据库连接字符串的name///

public DContext() : base("name=MyContext")

{

}#region 数据集

public DbSet AccountUsers { get; set; }#endregion }

}

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

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

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

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

classProgram

{static void Main(string[] args)

{try{var user = newAccountUser()

{

Name= "Test",

Sex= true,

Age= 29};using (var context = newDContext())

{

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 classProvice

{///

///省份ID///

public int ProviceId { get; set; }///

///省份名///

public string ProviceName { get; set; }///

///省份下城市///

public List Citys { get; set; }

}public classCity

{///

///城市ID///

public int CityId { get; set; }///

///所属省份ID///

public int ProviceId { get; set; }///

///城市名称///

public string CityName { get; set; }///

///所属城市///

public Provice ProviceData { get; set; }

}

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

usingSystem.Data.Entity.ModelConfiguration;namespaceEFCodeFirst

{public class ProviceConfiguration : EntityTypeConfiguration{publicProviceConfiguration()

{

ToTable("provice") //映射表

.HasKey(q => q.ProviceId) //指定主键

.HasMany(q => q.Citys).WithRequired(q => q.ProviceData).HasForeignKey(q => q.ProviceId); //配置一对多关系

}

}

}

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

usingSystem.Data.Entity.ModelConfiguration;namespaceEFCodeFirst

{public class CityConfiguration : EntityTypeConfiguration{publicCityConfiguration()

{

ToTable("city")

.HasKey(q=>q.CityId)

.Property(q=>q.ProviceId).IsRequired();

}

}

}

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

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

public classDContext : DbContext

{///

///添加构造函数,name为config文件中数据库连接字符串的name///

public DContext() : base("name=MyContext")

{

}#region 数据集

public DbSet AccountUsers { get; set; }public DbSet Provices { get; set; }public DbSet Citys { get; set; }#endregion

#region Fluent API配置

protected override voidOnModelCreating(DbModelBuilder modelBuilder)

{

modelBuilder.Configurations.Add(newProviceConfiguration());

modelBuilder.Configurations.Add(newCityConfiguration());

}#endregion}

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

static void Main(string[] args)

{try{var provice = newProvice

{

ProviceName= "河南省",

Citys= new List()

{new City() { CityName = "安阳"},new City() { CityName = "郑州"},new City() { CityName = "洛阳"},

}

};using (var context = newDContext())

{

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是可以同时使用的,但同效果的配置只需要在二者之一中配置就好。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。