Навигационная собственность EF через различные свойства кроме ключа - PullRequest
0 голосов
/ 06 ноября 2018

Я работаю над сопоставлением устаревшего приложения с классами и использую EntityFramework против него.

Один недостаток, который я обнаружил в этой устаревшей базе данных, заключается в том, что несколько таблиц ссылаются на конкретную таблицу через 2 разных поля.

Я не уверен, возможно ли это и почему я ничего не могу найти, поэтому я здесь.

Вот визуальный образец:

public class Term {
    [Key]
    public string Id { get; set; } // sample value: "12-34-56/78"
    public string CleanId { get; set; } // sample value: "12345678" (basically the Id without special characters)
    public DateTime Date { get; set; }
}

public class App {
    public int Id { get; set; }
    public string CleanTermId { get; set; } // foreign key is in Term class using the `CleanId` field
}

public class Question {
    public int Id { get; set; }
    public string TermId { get; set; } // foreign key is in Term class using the `Id` field
}

Как правильно добавить навигационное свойство из App и Question в класс Term, используя DataAnnotations (предпочтительно) - Fluent API? Мне не требуется навигационное свойство от Term до App или Question, но это нормально, если ваш ответ включает его.

Дайте мне знать, если это не ясно.

Ответы [ 2 ]

0 голосов
/ 06 ноября 2018

Привет, это правильный код:

    public class Term
{
    [Key]
    public string Id { get; set; }
    public string CleanId { get; set; }
    public DateTime Date { get; set; }
}

public class App
{
    public int Id { get; set; }

    [ForeignKey("CleanTermId")]
    public Term MyTerm { get; set; }
    public string CleanTermId { get; set; } 

}

public class Question
{
    public int Id { get; set; }

    [ForeignKey("TermId")]
    public Term MyTerm { get; set; }
    public string TermId { get; set; }
}
0 голосов
/ 06 ноября 2018

Присоединение к полям, отличным от Primary Key, не поддерживалось в версиях EF до EF Core, однако, учитывая ваше упоминание о том, что это устаревшее приложение, я сомневаюсь, что вы захотите изменить его, чтобы иметь возможность использовать EF Core.

Был запрос на голос пользователя для добавления этой функции Здесь , в ответ на который у них не было планов добавлять эту функцию в EF6 - поэтому Core был бы единственным способом действительно сделать это.

С точки зрения ваших классов вы сможете связать Вопрос и Термин как основанный на них PK - FK, но приложение к термину основывается как на полях, не связанных с PK, даже с учетом ограничения Unique для БД, это нечто не поддерживается в EF до Core

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