Отношение «один ко многим» со свойством навигации только с одной стороны? - PullRequest
0 голосов
/ 20 февраля 2020

У меня прекрасные отношения один ко многим между двумя таблицами: Play и Player:

public class Player
{
    public int PlayerId { get; set; }
    public string Name { get; set; }

    public ICollection<Play> Plays { get; set; }
}

public class Play
{
    public int PlayId { get; set; }

    public int PlayerId { get; set; }
    public Player Player { get; set; }
}

modelBuilder.Entity<Play>()
    .HasOne<Player>(p => p.Player)
    .WithMany(p => p.Plays)
    .OnDelete(DeleteBehavior.Cascade)
    .HasForeignKey(p => p.PlayerId)
    .IsRequired();

Можно ли пропустить свойство навигации на стороне? Например, удалить Plays коллекцию из Player?

public class Player
{
    public int PlayerId { get; set; }
    public string Name { get; set; }
}

У меня будет два специфических c вопроса:

  1. Можно ли вообще это сделать?
  2. Можно ли это сделать это, не полагаясь на соглашения EF Core - например, "Id" является первичным ключом et c ...? (Имеется в виду, что все ясно, либо в свободном API, либо в виде аннотаций)

1 Ответ

1 голос
/ 20 февраля 2020

Можно ли опустить навигационное свойство на стороне? Например, удалить Plays коллекцию из Player?

Абсолютно возможно. Напишите свою конфигурацию сущности следующим образом:

modelBuilder.Entity<Play>()
    .HasOne<Player>(p => p.Player)
    .WithMany() // <-- Here it is
    .HasForeignKey(p => p.PlayerId)
    .OnDelete(DeleteBehavior.Cascade)
    .IsRequired();

Возможно ли это сделать, не полагаясь на соглашения EF Core - например, "Id" - это первичный ключ et c ...? (Имеется в виду, что все ясно, либо в свободном API, либо в виде аннотаций)

Нет! Это невозможно без Свободный API .

...