Позволит ли EF Fluent API отображать необязательный нестандартный FK на нестандартный первичный ключ или использовать нестандартную проекцию - PullRequest
1 голос
/ 20 марта 2020

Проблемы: я работаю с унаследованным кодом и пытаюсь добавить связанную сущность, которая имеет четко определенную связь между столбцом кода в одной таблице и отдельной таблицей кода. ПРИМЕЧАНИЕ: Внешний ключ не настроен , а ссылка основана на строковом "Коде", а не первичный ключ.

Я теряю ценные издержки В настоящее время, поскольку эти отношения не подразумеваются, мне, по сути, приходится загружать эти отношения в основную модель. С тысячами коллекций приходится материализовать

Пример:

public class Problem
{
    int Id
    string ProblemName
    string ProblemCode  <<< this is the foreign key dependency
}

public class Code 
{ 
    int Id
    string Code <<< this is the pseudo-primary key 
    string CodeDescription    
}

Возможные решения 2: Привязка модели Я копался в документации Entity Framework и знаю, что это можно установить уникальное ограничение внешнего ключа, за исключением того, что в каждом случае, насколько я могу судить, оно всегда ссылается на явный первичный ключ принципала.

Вопрос 1: Будет ли EF Fluent API разрешить сопоставление необязательного нестандартного FK с нестандартным первичным ключом

Возможное решение 2: загрузка связанной сущности в контекстном вызове. Это менее желательный метод, но я сейчас его изучаю, используя foreach для заполнения слабо связанных сущностей таким образом. К сожалению, использование Select для проецирования этого в существующую композицию не работает, поскольку сущности являются (вздохами) вариантами дочерних сущностей, а вызов запроса имеет абстрактную родительскую сущность (сущность EF - «Проблема», но для выбора потребуется что-то вроде « CarProblem ").

Вопрос 2. Рекомендуемые решения для назначения объекта без использования проекций SELECT (в настоящее время я не верю, что это присутствует)

1 Ответ

0 голосов
/ 20 марта 2020

Позволит ли EF Fluent API отображать необязательный нестандартный FK на нестандартный первичный ключ

Да. EF не волнует, что такое real PK. Конечно, настоятельно рекомендуется иметь уникальный индекс в базе данных. Но в EF просто пометьте любой ключ, который вы хотите, в качестве ключа Entity, и вы можете использовать его для свойств навигации.

например

public class Code 
{ 
    int Id {get;set;}
    [Key]
    string Code {get;set;}
    string CodeDescription  {get;set;}
}

EF Core поддерживает альтернативные ключи, но в EF 6 вы может иметь только один ключ для каждого типа объекта.

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