运维开发网

实体框架管理一对二的实体关系

运维开发网 https://www.qedev.com 2022-09-12 16:40 出处:网络
<p本文详细讲解了Entity?Framework管理一对二实体关系的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

<p本文详细讲解了Entity?Framework管理一对二实体关系的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

在上一篇文章中,我们简要介绍了如何使用Fluent API管理一对一的实体关系。在本文中,我们随后介绍了如何使用Fluent API管理一对多实体关系。

要在数据库中配置一对多关系,我们可以依赖EF约定,或者使用数据注释或Fluent API来显式创建关系。接下来,以捐赠人和付款方式付款方式两类为例。在这里,一对多的关系是:一个人可以通过多种支付方式赞助我。


付款方式分类的支付方式结构如下:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace OneToMany.Model.Model{ public class PayWay { public int PayWayId { get; set; } public string Name { get; set; } public Virtual Donator Donator { get; set; } }}

因为一个资助人可以通过多种支付方式资助我,所以这句话表示捐赠人对象应该有一个PayWay的集合。因此,我们必须向Donator类添加一个新的collection属性。施主类施主具有以下结构:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace OneToMany.Model.Model{ public class Donator { public int Id { get; set; } public string Name { get; set; } public string Amount { get; set; } public DateTime DonateDate { get; set; } /// lt;summarygt; /// PayWay类型的集合属性 /// lt;/summarygt; public Virtual ICollectionlt;PayWaygt; PayWays { get; set; } }}

施主类的配置伙伴类定义如下:

using OneToMany.Model.Model;using System;using System.Collections.Generic;using System.Data.Entity.ModelConfiguration;using System.Linq;using System.Text;using System.Threading.Tasks;namespace OneToMany.Map.Map{ public class DonatorMap :EntityTypeConfigurationlt;Donatorgt; { public DonatorMap() { ToTable("Donator"); //将Name设置为必须 this.Property(p =gt; p.Name).IsRequired(); } }}

路的配置伙伴类定义如下:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using OneToMany.Model.Model;using System.Data.Entity.ModelConfiguration;namespace OneToMany.Map.Map{ public class PayWayMap : EntityTypeConfigurationlt;PayWaygt; { public PayWayMap() { ToTable("PayWay"); this.Property(p =gt; p.Name).HasMaxLength(16); } }}

EFDbContext类定义如下:

using OneToMany.Model.Model;using System;using System.Collections.Generic;using System.Data.Entity;using System.Linq;using System.Text;using System.Threading.Tasks;namespace OneToMany.Map.EFContext{ public class EFDbContext:DbContext { public EFDbContext() : base("name=CodeFirstApplication") { } public DbSetlt;PayWaygt; PayWays { get; set; } public DbSetlt;Donatorgt; Donators { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { // 设置主键 modelBuilder.Entitylt;PayWaygt;().HasKey(p =gt; p.PayWayId); modelBuilder.Entitylt;Donatorgt;().HasKey(p =gt; p.DonatorId); // 设置一对多 modelBuilder.Entitylt;Donatorgt;().HasMany(p =gt; p.PayWays).WithRequired(t =gt; t.Donator); base.OnModelCreating(modelBuilder); } }}

控制台程序定义如下:

using OneToMany.Map.EFContext;using OneToMany.Model.Model;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace OneToManyApplication{ class Program { static void Main(string[] args) { using (var context = new EFDbContext()) { var donator = new Donator { Amount = 6, Name = "虾米", DonateDate = DateTime.Now, PayWays = new Listlt;PayWaygt; { new PayWay{Name="支付宝"}, new PayWay{Name="微信"} } }; context.Donators.Add(donator); context.SaveChanges(); } Console.WriteLine("执行成功"); Console.ReadKey(); } }}

程序运行后,数据库结构如下:


查询数据:


这就是本文关于实体框架管理一对二实体关系的全部内容。>    

0

精彩评论

暂无评论...
验证码 换一张
取 消