TL; DR
Я бы хотел, чтобы несколько композиций в одном и том же классе, используя Entity Framework, отображались по-разному, а компонент имел один внешний ключ для композитора.или с таблицей между ними.
Правильное объяснение
Я проектирую некоторый код с использованием Enterprise Architect.UML для заинтересованных классов выглядит следующим образом:
Сгенерированный код на C # имеет вид
public class A
{
public int id { get; set; }
public List<B> foo { get; set; }
public List<B> bar { get; set; }
}
public class B
{
public int id { get; set; }
// fields...
}
Отлично!Вот как я этого хочу.Тем не менее, мой первый подход кода Entity Framework (не может быть изменен, он использовался годами в проекте) создает некоторые миграции, которые не совсем такие, какими я бы хотел, чтобы они были.
A - это таблица, содержащая только ееполя (в примере, id).B выглядит следующим образом:
| id | field1 | field2 | A_ID1 | A_ID2 |
Ну, это работает, но проблема в том, что в реальном сценарии у меня есть что-то вроде десяти композиций для нескольких классов.Один и тот же экземпляр B не будет когда-либо распределяться между несколькими классами.В результате получается таблица, подобная этой
| id | field1 | field2 | A_ID1 | A_ID2 |
| 1 | .. | .. | 1 | null |
| 2 | .. | .. | 2 | null |
| 2 | .. | .. | null | 3 |
Т.е. только один внешний ключ на строку (и я повторяю это, потому что это то, что беспокоит меня больше всего, есть много внешних ключей), не равен нулю, все остальные равны нулю,
Есть ли у вас какие-либо предложения по улучшению этого отображения?Я использую следующие инструменты:
Enterprise Architect <-> Entity Framework <-> EF Code First Migrations