EF Core: необязательное отношение внешнего ключа «один к одному» от объекта содержимого - PullRequest
0 голосов
/ 11 января 2020

Я реализовал некоторый контекст базы данных для моего приложения. net core blazor. Контекст базы данных имеет доступ к внешней базе данных (нет миграции базы данных и т. Д. c.)

Теперь моя проблема заключается в том, что я не уверен, как определить внешний ключ, используя текущие 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;}
}

As модели указывают, что "shop_id" - это внешний ключ.

Итак ... У меня нет ссылки на транзакцию в моей сущности магазина. Кроме того, в моем производительном сценарии у меня есть некоторые необязательные отношения, такие как это, например, значение shop_id будет нулевым

Как бы я указал необязательное отношение к моему конструктору моделей?

С уважением

1 Ответ

1 голос
/ 11 января 2020

установите дополнительный 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...