#c# #entity-framework #ef-database-first
#c# #entity-framework #ef-database-first
Вопрос:
Я использую C # Entity Framework 6, и у меня есть база данных с несколькими схемами, в этих схемах у меня есть таблицы с одинаковыми именами. Например:
- Скорость.Гостиница
- Доступность.Гостиница
У меня есть один проект для всех моих объектов базы данных с такой структурой:
Project Name = Storm.API.Data
In this project I have folders with the schema names: "Availability", "Rates".
In each folder I have the proper 'edmx' file.
Когда я запускаю свой проект, я получаю эту ошибку:
Schema specified is not valid. Errors:
The mapping of CLR type to EDM type is ambiguous because multiple CLR types match the EDM
type 'Hotel'. Previously found CLR type 'Storm.API.Data.Rates.Hotel',
newly found CLR type 'Storm.API.Data.Availability.Hotel'.
Единственное решение, которое я придумал, — это разделить схемы на разные проекты, но поскольку у меня более 2 схем, я не хочу создавать так много проектов только для этого.
Есть ли другое решение, которое позволит мне использовать все схемы в одном проекте без этой ошибки?
Комментарии:
1. Вы можете редактировать имя типа объекта в обозревателе моделей для каждой схемы. Итак, у вас есть тип Availability_Hotel для схемы доступности и Rates_Hotel для схемы ставок.
2. Я думаю, что наличие отдельных проектов является хорошим решением, поскольку наличие разных схем определяет ваш домен, и лучше сделать это разделение домена четким, имея отдельные проекты.
Ответ №1:
Вы можете:
- Присвойте каждому из них другое имя класса в вашем коде
- Используйте 2 разных класса DbContext с разным пространством имен для сущностей. Включаете ли вы это в другой проект, зависит от вас, но не обязательно.
- Не уверен, что это сработает, но попробовать стоит: создайте пространство имен для каждой схемы и разместите все в 1 DbContext.
Комментарии:
1. 1. Плохая идея вручную изменять имя класса в автоматически сгенерированном коде, поскольку оно будет потеряно при обновлении модели. 2. Использование 2 DbContext в одном и том же не сработало. 3. Это то, что я сделал в первую очередь.