Настроить свойство навигации для одного ко многим в EF Core 3, не используя первичные ключи? - PullRequest
0 голосов
/ 16 января 2020

Использование EF Core 3.0 Я пытаюсь настроить один-ко-многим навигацию между следующими двумя классами.

public class Organization
{
    public decimal Id{get;set;}
    public int ClientId{get;set;}
    public virtual ICollection<Contact> Contacts { get; set; }
}

public class Contact
{
    public int Id{get;set;}
    public int? ClientId{get;set;}
    public virtual Organization Organization { get; set; }
}

Мне нужно иметь в навигации используются поля ClientId, а не какие-либо первичные ключи.

Я пробовал обе аннотации и свободно

modelBuilder.Entity<Contact>()
            .HasOne<Organization>(o => o.Organization)
            .WithMany(c => c.Contacts)
            .HasForeignKey("ClientId");

Но по какой-то причине он продолжает возвращаться к подключению ClientId к Id Организации.

Как это можно настроить?

Да, поле Id в устаревшей базе данных является десятичным, но я не могу это изменить.

1 Ответ

2 голосов
/ 16 января 2020

Если в базе данных уже есть внешний ключ, объявленный из Contact.ClientId для Organization.ClientId, попробуйте:

modelBuilder.Entity<Contact>()
      .HasOne<Organization>(o => o.Organization)
      .WithMany(c => c.Contacts)
      .HasForeignKey(c => c.ClientId)
      .HasPrincipalKey(org => org.ClientId);

Для получения более подробной информации: Альтернативные ключи в EF Core

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