商品订单和快递单的关系,一般情况下是一对一的,在网上购买商品下一个订单,这个订单会生成一个对应的快递单。如下图所示:
新建一个控制台应用程序
控制台项目结构:
项目引用的程序集:
Microsoft.EntityFrameworkCore.SqlServer
扫描二维码关注公众号,回复: 14328178 查看本文章![]()
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.生成并执行数据库迁移脚本
使用命令生成数据库表创建脚本,并执行相关脚本。具体操作参考文章
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();
}
}
}
}
查询数据库表记录