欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Entity?Framework管理一對(duì)二實(shí)體關(guān)系

 更新時(shí)間:2022年03月05日 09:37:18   作者:.NET開發(fā)菜鳥  
本文詳細(xì)講解了Entity?Framework管理一對(duì)二實(shí)體關(guān)系的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

上一篇文章中,簡(jiǎn)單的介紹了使用Fluent API如何管理一對(duì)一的實(shí)體關(guān)系,在這篇文章中,接著介紹Fluent API如何管理一對(duì)多的實(shí)體關(guān)系。

要在數(shù)據(jù)庫中配置一對(duì)多關(guān)系,我們可以依賴EF約定,還可以使用數(shù)據(jù)注解或Fluent API來顯式創(chuàng)建關(guān)系。接下來使用捐贈(zèng)者Donator和支付方法PayWay這兩個(gè)類來舉例子,這里的一對(duì)多關(guān)系是:一個(gè)人可以通過多種支付方式贊助我。

支付方式類PayWay結(jié)構(gòu)如下:

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; }
    }
}

因?yàn)橐粋€(gè)贊助者可以通過多種支付方式贊助我,這句話就表明了Donator對(duì)象應(yīng)該有一個(gè)PayWay的集合,因此,我們要給Donator類新加入一個(gè)集合屬性,捐贈(zèng)者類Donator結(jié)構(gòu)如下:

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設(shè)置為必須
            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)
        {
            // 設(shè)置主鍵
            modelBuilder.Entity<PayWay>().HasKey(p => p.PayWayId);
            modelBuilder.Entity<Donator>().HasKey(p => p.DonatorId);
            // 設(shè)置一對(duì)多
            modelBuilder.Entity<Donator>().HasMany(p => p.PayWays).WithRequired(t => t.Donator);
            base.OnModelCreating(modelBuilder);
        }
    }
}

控制臺(tái)程序定義如下:

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("執(zhí)行成功");
            Console.ReadKey();
        }
    }
}

程序運(yùn)行后數(shù)據(jù)庫結(jié)構(gòu)如下:

查詢數(shù)據(jù):

到此這篇關(guān)于Entity Framework管理一對(duì)二實(shí)體關(guān)系的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論