EF Core Соединение с использованием Include, но ForeignKey не является первичным ключом для другой таблицы - PullRequest
0 голосов
/ 21 февраля 2019

Я пытаюсь связать свои таблицы с ForeignKey и PrimaryKey на другом конце.Но теперь я буду использовать ForeignKey, который не является основным для указанной таблицы.Я использовал [InverseProperty] , но я думаю, что в этом есть ошибка, так как я уже часами осматриваюсь, и все они говорят об этом одно и то же.

Таблица документов:

public class Document
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int DocumentId { get; set; }
    public int ProjectId { get; set; }
    public int DepartmentId { get; set; }
    public int AuthorId { get; set; }

    [NotMapped]
    public virtual User Author { get; set; }
}

Пользователи

public class User
{
    [Key]
    public int UserId { get; set; }
    public int AuthUserId { get; set; }
    public string DisplayName { get; set; }

    [NotMapped]
    [ForeignKey("AuthorId")]
    public virtual Document Document { get; set; }
}

Контекст:

modelBuilder.Entity<User>(entity =>
        {
            entity.HasOne(u => u.Document)
            .WithMany("AuthorId");
        });

Я пытаюсь использовать решение, которое они здесь , но не повезло.

Любая помощь будет принята с благодарностью.Спасибо!

1 Ответ

0 голосов
/ 21 февраля 2019

Но теперь я буду использовать ForeignKey, который не является основным для указанной таблицы.

Для этого вы можете использовать функцию EF Core Alternate Keys ,Но сначала исправьте настройку вашего класса модели следующим образом: (Как вы сказали, User будет иметь кратное Document)

public class Document
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int DocumentId { get; set; }
    public int ProjectId { get; set; }
    public int DepartmentId { get; set; }
    public int AuthorId { get; set; }

    public User Author { get; set; }
}

public class User
{
    [Key]
    public int UserId { get; set; }
    public int AuthUserId { get; set; }
    public string DisplayName { get; set; }


    public ICollection<Document> Documents { get; set; }
}

Затем в конфигурации Fluent API выполните следующие действия:

modelBuilder.Entity<Document>()
        .HasOne(p => p.Author)
        .WithMany(b => b.Documents)
        .HasForeignKey(p => p.AuthorId)
        .HasPrincipalKey(b => b.AuthUserId); // <-- here you are specifying `AuthUserId` as `PrincipalKey` in the relation which is not primary key
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...