EFCore-12 一对一关系配置

商品订单和快递单的关系,一般情况下是一对一的,在网上购买商品下一个订单,这个订单会生成一个对应的快递单。如下图所示:

新建一个控制台应用程序

控制台项目结构:

项目引用的程序集:

Microsoft.EntityFrameworkCore.SqlServer 

Microsoft.EntityFrameworkCore.Tools 

 

1.在实体类中定义关系属性

Order.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 一对一
{
    /// <summary>
    /// 商品订单信息
    /// </summary>
    class Order
    {
        /// <summary>
        /// 订单主键
        /// </summary>
        public long Id { get; set; }

        public string Name { get; set; }

        public Delivery Delivery { get; set; }
    }
}

Delivery.cs

namespace 一对一
{
    /// <summary>
    /// 快递信息表
    /// </summary>
    class Delivery
    {
        /// <summary>
        /// 主键
        /// </summary>
        public long Id { get; set; }

        /// <summary>
        /// 快递公司名称
        /// </summary>
        public string CompanyName { get; set; }

        /// <summary>
        /// 快递单号
        /// </summary>
        public string Number { get; set; }

        /// <summary>
        /// 商品订单表
        /// </summary>
        public Order Order { get; set; }

        /// <summary>
        /// 商品订单表ID
        /// </summary>
        public long OrderId { get; set; }

    }
}

2.FluentAPI关系配置

OrderConfig.cs

using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;

namespace 一对一
{
    class OrderConfig : IEntityTypeConfiguration<Order>
    {
        public void Configure(EntityTypeBuilder<Order> builder)
        {
            builder.ToTable("T_Orders");
            builder.HasOne<Delivery>(o => o.Delivery).WithOne(d => d.Order).HasForeignKey<Delivery>(o => o.OrderId);
        }
    }
}

DeliveryConfig.cs

using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;

namespace 一对一
{
    class DeliveryConfig : IEntityTypeConfiguration<Delivery>
    {
        public void Configure(EntityTypeBuilder<Delivery> builder)
        {
            builder.ToTable("T_Deliverys");
            
        }
    }
}

3.DbContext配置

用于定义数据库表和数据库链接等信息

MyDbContext.cs


using Microsoft.EntityFrameworkCore;

namespace 一对一
{
    class MyDbContext : DbContext
    {

        public DbSet<Order> orders { get; set; }
        public DbSet<Delivery> deliveries { get; set; }


        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            base.OnConfiguring(optionsBuilder);

            string connStr = "Server=.;Database=EFCoreDemo2;Trusted_Connection=True;MultipleActiveResultSets=true";
            optionsBuilder.UseSqlServer(connStr);


            //打印log日志
            //optionsBuilder.LogTo(msg =>
            //{
            //    if (msg.Contains("CommandExecuting"))
            //    {
            //        Console.WriteLine(msg);
            //    }
            //    else
            //    {
            //        return;
            //    }
            //});
        }



        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);

            //从当前程序集加载所有IEntityTypeConfiguration
            modelBuilder.ApplyConfigurationsFromAssembly(this.GetType().Assembly);
        }
    }
}

4.生成并执行数据库迁移脚本

使用命令生成数据库表创建脚本,并执行相关脚本。具体操作参考文章

EFCore-5 Migration操作

 

5.往数据库表插入记录

using System.Threading.Tasks;

namespace 一对一
{
    class Program
    {
        static async Task Main(string[] args)
        {
            using (MyDbContext ctx = new MyDbContext())
            {
                Order order = new Order();
                order.Name = "书本";

                Delivery delivery = new Delivery();
                delivery.CompanyName = "秒达快递";
                delivery.Number = "md01";
                delivery.Order = order;

                ctx.orders.Add(order);
                ctx.deliveries.Add(delivery);

                await ctx.SaveChangesAsync();
            }
        }
    }
}

查询数据库表记录

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值