#entity-framework-4 #database-first #ef-database-first
#entity-framework-4 #database-first #ef-database-first
Вопрос:
Я использую Entity Framework 4 и с привязкой Database First, и EF не генерирует сущности для нескольких моих таблиц. Я не получаю никаких ошибок, и независимо от того, сколько раз я выбираю таблицы для генерации во всплывающем меню «Обновить модель из базы данных» на design surface, одни и те же таблицы по-прежнему отсутствуют в модели.
Я не получаю ошибок в мастере. Они просто не генерируются. Есть какие-нибудь подсказки?
Комментарии:
1. Есть ли в этих таблицах первичный ключ?
2. @Akash, это может быть шаблоном. Похоже, что все поля в этих таблицах обнуляемы, поэтому EF, вероятно, не может предполагать значение PK. Если вы хотите преобразовать свой комментарий в ответ, я приму его.
Ответ №1:
EF требует первичный ключ для таблицы. EF не будет отображать таблицы, для которых он не может найти или получить первичный ключ. Если все столбцы имеют значение null, он не может использовать первичный ключ. Если один или несколько столбцов не обнуляются, EF, очевидно, получит первичный ключ для таблицы.
Ответ №2:
EF будет игнорировать таблицу без первичных ключей.
Комментарии:
1. Небольшое уточнение — EF не будет отображать таблицы, для которых он не может найти или получить первичный ключ. Если все столбцы имеют значение null, он не может использовать первичный ключ.
2. У EF нет проблем с обнуляемыми столбцами, он проверяет только первичный ключ. И первичный ключ не может быть обнуляемым, поэтому условие для обнуляемости не учитывается.
3. Что ж, все, что я могу сказать, это попробовать. Если ВСЕ столбцы имеют значение null, таблица автоматически не сможет сопоставиться. Если у вас есть один или несколько столбцов, которые не обнуляются, он получает первичный ключ и сопоставляет таблицу.
4. Откуда получить первичный ключ?
Ответ №3:
Варианты, которые я могу придумать:
-
Вы установили флажок рядом с этими таблицами?
-
Вы ранее добавляли их, а затем удаляли их сущности, но сохраняли кэш таблиц?
-
Если это так, вы можете удалить их из окна entity browser и повторно добавить их или вручную добавить объекты и определить таблицу, с которой они сопоставляются, в окне сопоставления.
-
Возможно, таблицы были классифицированы как отношения, а не сущности?
- Вы можете вручную добавить объекты и выбрать таблицу, с которой они сопоставляются, в окне сопоставления.
Комментарии:
1. Спасибо за твой ответ, Дэнни. Как я указываю в своем вопросе, я неоднократно пытался переназначить их с помощью мастера, и они никогда не сопоставляются. Я также выбираю все таблицы для привязки в модели при первоначальном создании модели. Вероятно, я могу создать для них сопоставления вручную, если потребуется, но это не отвечает на вопрос о том, почему они не отображаются в первую очередь, а также не сулит ничего хорошего для обновления модели из базы данных в будущем.
2. Попробуйте добавить новую сущность из toolbox, а не из wizard и сопоставить ее.
Ответ №4:
На самом деле, в моем случае это не работает, потому что я использовал поле hierarchyid в качестве первичного ключа, а EF не работает с этим типом поля, поэтому он не импортировал таблицу, потому что требуется действительный PK.
Ответ №5:
Возможно, когда вы используете таблицы с несколькими различными типами полей, как иерархию в SQL Server.
Ответ №6:
Без таблиц первичного ключа, которые автоматически пропускаются в EF, в противном случае вы фиксируете значение как Not Null.