EFCore 表关系一对一配置和如何查看SQL日志

1、以订单与物流为示例。

// 配置订单与物流实体和配置文件
// 物流实体
 internal class ExpressBill
 {
     public int ExpressBillId { get; set; }

     public string Name { get; set; }

     public Order Order { get; set; } // 关联订单

     public int ExOrderId { get; set; }
 }
 // 物流配置文件 一对一配置 HasOne().WithOne() 这个属性可以配置在物流配置文件中,也可以配置在订单配置文件中
 
 internal class ExpressBillConfig : IEntityTypeConfiguration<ExpressBill>
{
    public void Configure(EntityTypeBuilder<ExpressBill> builder)
    {
        builder.ToTable("Buz_ExpressBill");
        builder.Property(p => p.Name).IsRequired().HasMaxLength(200);
        builder.HasOne(p => p.Order) // 指定当前实体(ExpressBill)与另一个实体(Order)之间的一对一关系
    		   .WithOne(o => o.ExpressBill) // 反向导航属性,指定 Order 实体中的 ExpressBill 属性也是一对一的关系
    		   .HasForeignKey<ExpressBill>(p => p.ExOrderId); // 指定外键字段
    		   //.HasForeignKey<ExpressBill>(p => p.ExOrderId):这一行指定了 ExpressBill 实体中的外键字段 ExOrderId 作为关联关系的外键。p => p.ExOrderId 表示 ExpressBill 实体中的 ExOrderId 字段。<ExpressBill> 是类型参数,它指明了当前配置的是哪个实体类型。
    }
}

 internal class Order
 {
     public int OrderId { get; set; }

     public string OrderName { get; set; }

     public ExpressBill ExpressBill { get; set; }

 }
  internal class OrderConfig : IEntityTypeConfiguration<Order>
 {
     public void Configure(EntityTypeBuilder<Order> builder)
     {
         builder.ToTable("Buz_Order");
         builder.Property(p => p.OrderName).IsRequired().HasMaxLength(200);
     }
 }
 // 配置数据库等信息
 internal class MyDbContext : DbContext
 { 
 	// private static ILoggerFactory loggerFactory = LoggerFactory.Create(p => p.AddConsole()); // 标准日志记录
     public DbSet<ExpressBill> ExpressBills { get; set; }
     public DbSet<Order> Orders { get; set; } 
     protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
     {
         base.OnConfiguring(optionsBuilder);
         var conStr = "Server=.;Database=Demo3;uid=sa;pwd=sasa;TrustServerCertificate=True;";
         optionsBuilder.UseSqlServer(conStr);
          // 查看SQL日志方式一、LoptionsBuilder.UseLoggerFactory(loggerFactory);
 		 //  查看日志方式二、
		 //optionsBuilder.LogTo(sql =>
		 //{
		 //    if (!sql.Contains("CommandExecuted")) return;
		 //    // Console.WriteLine(sql);
		 //}); // 简单查询sql日志
     }

     protected override void OnModelCreating(ModelBuilder modelBuilder)
     {
         base.OnModelCreating(modelBuilder);
         modelBuilder.ApplyConfigurationsFromAssembly(this.GetType().Assembly);
     }
 }
 static void Main(string[] args)
 {
       var order1 = new Order { OrderName = "买牛蹄" };
  var order2 = new Order { OrderName = "买筋头巴脑" };

  var express1 = new ExpressBill { Name = "顺丰快递", Order = order1 };
  var express2 = new ExpressBill { Name = "京东快递", Order = order2 };

  using (var myDbContext = new MyDbContext())
  {
      myDbContext.Orders.AddRange(order1, order2);
      myDbContext.ExpressBills.AddRange(express1, express2);
      myDbContext.SaveChanges();

         // 方式三查看SQL日志,用ToQueryString()(不能查询到插入和更新的sql);
         
                var querySql = myDbContext.Orders
                                         .Include(p => p.ExpressBill)
                                         .Where(p => p.OrderName == "买牛蹄")
                                         .ToQueryString();
         Console.WriteLine(sql); 
     }

 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值