Подтвердить что ты не робот

Entity Framework (Database-First) множественные отношения с правилами управления именованиями таблиц

Предположим, что мы имеем такую ​​ситуацию:

Таблицы в базе данных:

Country (id, country_name), Person (id, login), CountryManager (id_country, id_person), CountryStakeholder (id_country, id_person)

Если бы нам пришлось создать модель из базы данных, используя Entity Framework Database-First, в VS у нас был бы такой класс:

class Country {

int id;
string country_name;

virtual ICollection<Person> Person1; // Navigation Properties
virtual ICollection<Person> Person2; // ---------||----------

}

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

Похоже, что когда Entity Framework имеет дело с внешними ключами, он создает общие свойства навигации. Есть ли возможность управлять созданием свойств навигации по имени? Person1, Person2 не очень объяснительный, к сожалению.

4b9b3361

Ответ 1

В VS вы можете сделать это с помощью графического интерфейса.

Если вы покажете "Браузер модели", перейдите вниз по дереву, чтобы:

YourEntityModel > Типы сущностей > Страна

затем щелкните правой кнопкой мыши свойство свойств Person1 и выберите "Свойства", после чего вы можете изменить имя имени свойства навигации на все, что вам нравится:

enter image description here

Просто измените имя, сохраните изменения и сделайте...

(На самом деле есть много способов добраться до окна свойств свойства навигации - вы также можете щелкнуть правой кнопкой мыши по нему на диаграмме модели)

Ответ 2

Из записи " Работа с свойствами обратной навигации" из книги " Programming Entity Framework: сначала код:

Вы можете добавить конфигурацию (используя аннотации данных или Fluent API) представить эту информацию разработчику модели. С данными Аннотации, вы будете использовать аннотацию под названием InverseProperty. С Fluent API, вы используете комбинацию методов Has/With для укажите правильные концы этих отношений.

Вы можете разместить аннотации на любом конце отношения (или оба конца, если хотите). Хорошо приклеивайте их к свойствам навигации в классе жилья (пример 4-10). Данные InverseProperty Аннотации необходимо имя соответствующего свойства навигации в связанный класс как его параметр.

Пример:

[InverseProperty("PrimaryContactFor")]
public Person PrimaryContact { get; set; }

[InverseProperty("SecondaryContactFor")]
public Person SecondaryContact { get; set; }

Ответ 3

Я рекомендую использовать https://visualstudiogallery.msdn.microsoft.com/ee4fcff9-0c4c-4179-afd9-7a2fb90f5838

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

Как и во всех примерах, которые я видел при переименовании свойств навигации, этого будет недостаточно, потому что EF по-прежнему необходимо сопоставить, чтобы использовать эти свойства навигации (вы могли бы взломать его, хотя и имеете User2 указывает на ModifiedByUser, например).