Entity Framework管理一对二实体关系
在上一篇文章中,简单的介绍了使用Fluent API如何管理一对一的实体关系,在这篇文章中,接着介绍Fluent API如何管理一对多的实体关系。
要在数据库中配置一对多关系,我们可以依赖EF约定,还可以使用数据注解或Fluent API来显式创建关系。接下来使用捐赠者Donator和支付方法PayWay这两个类来举例子,这里的一对多关系是:一个人可以通过多种支付方式赞助我。
支付方式类PayWay结构如下:
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; } } }
因为一个赞助者可以通过多种支付方式赞助我,这句话就表明了Donator对象应该有一个PayWay的集合,因此,我们要给Donator类新加入一个集合属性,捐赠者类Donator结构如下:
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; } /// <summary> /// PayWay类型的集合属性 /// </summary> public virtual ICollection<PayWay> PayWays { get; set; } } }
Donator类的配置伙伴类的定义如下:
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 :EntityTypeConfiguration<Donator> { public DonatorMap() { ToTable("Donator"); //将Name设置为必须 this.Property(p => p.Name).IsRequired(); } } }
PayWay的配置伙伴类的定义如下:
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 : EntityTypeConfiguration<PayWay> { public PayWayMap() { ToTable("PayWay"); this.Property(p => 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 DbSet<PayWay> PayWays { get; set; } public DbSet<Donator> Donators { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { // 设置主键 modelBuilder.Entity<PayWay>().HasKey(p => p.PayWayId); modelBuilder.Entity<Donator>().HasKey(p => p.DonatorId); // 设置一对多 modelBuilder.Entity<Donator>().HasMany(p => p.PayWays).WithRequired(t => 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 List<PayWay> { new PayWay{Name="支付宝"}, new PayWay{Name="微信"} } }; context.Donators.Add(donator); context.SaveChanges(); } Console.WriteLine("执行成功"); Console.ReadKey(); } } }
程序运行后数据库结构如下:
查询数据:
到此这篇关于Entity Framework管理一对二实体关系的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
相关文章
ASP.NET Core使用SkiaSharp实现验证码的示例代码
本篇文章主要介绍了ASP.NET Core使用SkiaSharp实现验证码的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2017-12-12ASP.NET中CKEditor与CKFinder的配置使用
这篇文章主要介绍了ASP.NET中CKEditor与CKFinder的配置使用的相关资料,需要的朋友可以参考下2015-06-06轻松解决asp.net用户ASPNET登录失败问题的方法分享
这篇文章介绍了asp.net用户ASPNET登录失败问题的方法,有需要的朋友可以参考一下2013-11-11详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
本篇文章主要介绍了免费开源的.NET多类型文件解压缩组件SharpZipLib,这也是一种解压缩组件,具有一定的参考价值,有兴趣的可以了解一下。2016-12-12asp.net下创建、查询、修改带名称空间的 XML 文件的例子
asp.net下创建、查询、修改带名称空间的 XML 文件的例子...2007-04-04.Net加密神器Eazfuscator.NET 2023.2 最新版使用教程
这篇文章主要介绍了.Net加密神器Eazfuscator.NET 2023.2最新版使用教程,本文通过图文实例代码相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2023-06-06asp.net中显示1至20相同数字相乘的结果,若值比50小就不显示
感兴趣的网友也可以练习练习。现在Insus.NET的作答如下,但老师还没有看,因此答案是否正确或是最好的,还不能确定,只是供参考2012-05-05
最新评论