一对一(注意:必须显示的在其中一个实体类中声明一个外键属性,并配置外键(HasForeignKey))
1、创建实体类
class Order
{
public long Id { get; set; }
public string Name { get; set; }
public string Address { get; set; }
public Delivery Delivery { get; set; }
}
class Delivery
{
public long Id { get; set; }
public string CompanyName { get; set; }
public string Number { get; set; }
public Order Order { get; set; }
//显示声明外键属性
public long OrderId { get; set; }
}
2、创建配置文件,并配置外键
OrderConfig
class OrderConfig : IEntityTypeConfiguration<Order>
{
public void Configure(EntityTypeBuilder<Order> builder)
{
builder.ToTable("T_Orders");
builder.HasOne<Delivery>(a => a.Delivery).WithOne(o => o.Order)
.HasForeignKey<Delivery>(c => c.OrderId);
}
}
DeliveryConfig
class DeliveryConfig : IEntityTypeConfiguration<Delivery>
{
public void Configure(EntityTypeBuilder<Delivery> builder)
{
builder.ToTable("T_Deliverys");
}
}
3、创建MyDbContext
class MyDbContext:DbContext
{
public DbSet<Order> Orders { get; set; }
public DbSet<Delivery> Deliverys { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
base.OnConfiguring(optionsBuilder);
optionsBuilder.UseSqlServer("Server=DESKTOP-7K7ADF7;Database=EFCore5;User Id=sa;Password=XXX;TrustServerCertificate=True;Trusted_Connection=True;MultipleActiveResultSets=True;");
.EnableSensitiveDataLogging() // 显示敏感数据(仅用于调试)
.LogTo(Console.WriteLine, LogLevel.Debug);
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.ApplyConfigurationsFromAssembly(this.GetType().Assembly);
}
}
4、插入数据
using (MyDbContext dbContext = new MyDbContext())
{
Order order=new Order();
order.Name= "订单2";
order.Address = "深圳福田";
Delivery dly = new Delivery();
dly.CompanyName = "申通";
dly.Number = "ST001001002";
dly.Order=order;
order.Delivery = dly;
dbContext.Orders.Add(order);
await dbContext.SaveChangesAsync();
}