0

我已经为我的 .net core blazor 应用程序实现了一些数据库上下文。数据库上下文可以访问外部数据库(无数据库迁移等)

现在我的问题是,当父表包含表的外键时,我不确定如何使用流利的 api 或数据属性定义外键。

作为简化示例:我有一个包含如下数据的交易实体:

[Table("transactions")]
public class Transaction
{
  [Key]
  [Column("id")]
  public int Id { get; set; }

  [Column("trans_num")]
  public string TransNum { get; set; }

  [Column("shop_id")]
  public int? ShopId { get; set; }

  [Column("total_amount")]
  public decimal TotalAmount { get; set; }

  public Shop Shop { get; set;}
}

一些商店实体的数据如下:

[Table("shops")]
public class Shop
{
  [Key]
  [Column("id")]
  public int Id { get; set; }

  [Column("shop_name")]
  public string ShopName{ get; set; }

  public Transaction Transaction { get; set;}
}

如模型所示,“shop_id”是外键。

所以......我的商店实体中没有交易参考。此外,在我的生产场景中,我有一些像这样的可选关系,例如 shop_id 将为空。

我将如何指示与我的模型构建器的可选关系?

此致

4

1 回答 1

1

在模型生成器中设置可选 FK

[Table("shops")]
public class Shop
{
  [Key]
  [Column("id")]
  public int Id { get; set; }

  [Column("shop_name")]
  public string ShopName{ get; set; }

  public virual ICollection<Transaction> Transactions { get; set;}
}

     modelBuilder.Entity<Shop>()
            .HasMany(c => c.Transactions)
            .WithOptional(c => c.Shop)
            .HasForeignKey(c => c.ShopId)
            .WillCascadeOnDelete(false);

如果您只寻找 EF 核心,那么您可以参考此链接:

WithOptional 与 Entity Framework Core

于 2020-01-11T19:34:54.600 回答