Я рад, что меня поправят, если я ошибаюсь, поскольку я уже давно ничего не пробовал, но, насколько мне известно, EF все еще не может создавать отношения из одного свойства типа к двум другим другим типам, или наоборот, даже с ограничениями, которые сделали бы его действительным.
В вашем случае вы получите 4 навигационных свойства, требуемых для вашего перевода. (int IndicatorRef1, int IndicatorRef2, int MeasureRef3, int MeasureRef4). Большинство не назвало бы это сценарием мечты.
Я задал похожий вопрос пару лет назад, и с тех пор вроде как пришел к выводу, что я был глуп, пытаясь заставить EF решить все мои проблемы.
Итак, вот ответ на то, что вы пытаетесь достичь, и, возможно, даже решение 2 ваших вопросов:
Не полагайтесь на ручку EF в любом сценарии. На самом деле, в значительной степени не полагайтесь на EF для обработки отношений, кроме 1-1, 1- * или * - *. И некоторые формы наследования.
В большинстве других случаев у вас будет по одному свойству навигации для каждого типа, на который вы пытаетесь сослаться, при этом данные будут заполнены нулями для каждого свойства навигации, но для одного целевого назначения.
Хорошие новости? Вы не должны полагаться на EF для этого. Основным преимуществом EF является его производительность. В некоторых случаях все еще стоит использовать EF, но предлагать свои собственные методы повышения производительности. Если вы хотите получить набор индикаторов с 2-мя коллекциями переводов на основе ссылки, просто создайте метод, который его предоставляет.
Что-то вроде
public IQueryable<Indicators> SetOfIndicatorsWithTranslations()
{
// Untested query that might need some fixing in an actual implementation
return ctx.Set<Indicators>().Select(ind => new Indicators() {
Text1Ref= ind.Text1Ref, // whatever the property is
Text1RefList = ctx.Set<Translation>().Where(t => t.TranslationId == ind.Text1Ref),
Text2Ref= ind.Text2Ref,
Text2RefList = ctx.Set<Translation>().Where(t => t.TranslationId == ind.Text2Ref),
});
}
Теперь этот запрос EF выполнит для вас изящно.
Есть, конечно, гораздо более элегантные решения для чего-то подобного Важно то, что иногда стоит сделать это самостоятельно, а не ограничивать себя возможностями своего инструмента выбора. (Ну, по крайней мере, это важная часть, которую я в конечном итоге выучил :))