ADO.NET Entity Framework: Майстер оновлення не додаватиме таблиці


93

Я додав до свого проекту нову модель даних сутності ADO.Net та за допомогою Майстра оновлення додав таблиці до моделі. П'ять із вибраних таблиць були додані на поверхню дизайну. Дві інші таблиці не додаватимуться. Я вибираю їх у майстрі та натискаю Готово, але вони ніколи не відображаються на поверхні дизайну.

Це помилка, чи бувають ситуації, коли таблицю не можна додати до моделі (за задумом)?


ОНОВЛЕННЯ: XML (* .edmx) виявляє проблему.

<!--Errors Found During Generation:
warning 6013: The table/view 'FooBar.dbo.Roles' does not 
have a primary key defined and no valid primary key could be inferred. 
This table/view has been excluded. To use the entity you will need to 
review your schema, add the correct keys and uncomment it.-->
<!--<EntityType Name="Roles">
    <Property Name="role_id" Type="decimal" />
    <Property Name="role_desc" Type="nvarchar" MaxLength="30" />
</EntityType>-->

8
Це повинно отримати на WAY більше голосів. Я не уявляв, що Visual Studio не може додати таблицю, оскільки файл .edmx - це єдине місце, де насправді йде помилка. Сподіваємось, у них з’явиться діалогове вікно у версії 2!
Джон Бубріскі

+1 - У моєму випадку повідомлення про помилку не було.
teynon

Як ви зазначали, таблиці, які не можна імпортувати, не мали первинних ключів. Додайте PK - і все готово.
Ерік,

Відповіді:


46

Конструкційна поверхня відрізняється від суттєвої моделі. У вашому EDMX можна мати таблицю, яка не відображається на поверхні дизайну. Перегляньте файл як XML, щоб перевірити, чи це так. У цьому випадку Майстер оновлення не дозволить повторно додавати таблиці, оскільки вони вже є частиною суттєвої моделі. Отже, загалом кажучи, Майстер оновлення знає більше про вашу модель сутності, ніж про поверхню дизайну, як таку .

Я не думаю, що це саме в вашій ситуації, але це повинно дати вам загальне уявлення про рішення: зайти в XML і шукати посилання на відповідні таблиці.


4
У мене щойно виникла ця проблема, я видалив таблицю з моделі, і коли я пішов додавати її знову, візуальний дизайнер не відображав її як базу даних. Щоб його обійти, я видалив текст із файлу .edmx, але зумів зіпсувати XML. Якщо ви зробите це, спочатку створіть резервну копію файлу, про всяк випадок. На щастя, мені вдалося знайти переплутаний тег за допомогою git diff.
GrandMasterFlush

41

Встановіть для основних ключів усі таблиці або лише один не встановлений прапорець "Дозволити нуль" для будь-якого стовпця кожної таблиці. Це працює для мене :)


2
Я вважаю, це правильна відповідь, принаймні це було для мене. Дякую!
Ерік

@Parvinder, я боровся з цим питанням у більшості своїх проектів. Зрештою, ваша відповідь зрозуміла мені все. У моєму випадку в таблиці приєднання я не вказав поле Не нульовий ключ або просто первинний ключ. Виправивши це, я мав спокій. Велике спасибі
PatsonLeaner

Що я зрозумів з роздільною здатністю, так це те, що ми не можемо додати таблицю в Entity Model, якщо i) ця таблиця не має первинного ключа або (ii) у цій таблиці немає стовпця Allow Null.
Муртуза-хан

10

1. Змініть структуру таблиці та додайте первинну колонку. Оновіть модель.

2. Змініть файл .EDMX у редакторі XML і спробуйте додати новий стовпець під тегом для цієї конкретної таблиці. (НЕ ПРАЦЮЄ)

3.Замість створення нового первинного стовпця до вихідної таблиці я зроблю складений ключ, залучивши всі існуючі стовпці. (РОБОТИ)

Entity Framework: Додавання таблиці даних без первинного ключа до моделі сутності.


Я зіткнувся з цим самим питанням. Модель сутності додавала таблицю, однак у дизайнері вона не відображалася. Я також не міг отримати до нього доступ у коді. Я додав поле ідентифікатора Ключ ... спрацював!
Раві Рам,

6

У мене теж була ця проблема, все вищесказане не працювало для мене. Мені допомогло наступне.

При спробі з'єднатися з базою даних ця база даних може мати різних користувачів з різними обліковими даними, які вона може прийняти. Скажімо, користувач A до D.

Якщо ви намагаєтеся встановити зв’язок із користувачем, переконайтеся, що у нього ввімкнено правильні облікові дані, у цьому випадку ввімкнено параметри читання та запису.

Для цього запустіть MS SQL Server Managment Studio, підключений до вашого SQL-сервера, і виберіть базу даних, з якою ви намагаєтеся встановити зв’язок у Visual Studio. У розділі 'your_dbname' -> Security -> Users ви знайдете список користувачів. Клацніть правою кнопкою миші ім'я користувача, з яким ви намагаєтесь увійти, і виберіть властивості. Відкривається вікно. Виберіть сторінку "Загальні" (вибрано за замовчуванням) і на вкладці "Членство в ролі бази даних" переконайтеся, що вибрано "db_datareader" і "db_datawrite".

Примітка: Коли ви входите занадто MS SQL Server Managment Studio, переконайтеся, що ви входите з користувачем, який може ввімкнути / вимкнути ці параметри ...


5

Перевірте наявність "Nulls" у вашій конкретній таблиці. Якщо для всіх стовпців встановлено значення "Allow Null", Entity Framework розглядає це як "Null" таблицю. У мене була та сама проблема, і я зняв прапорець "Дозволити нуль", і він додав потрібну таблицю.


1
Це працює, по-дурному в журналах не з’являється помилок і попереджень!
RolandoCC


1

Моє рішення - видалити всю модель і прочитати її, включаючи нові таблиці, які я хочу.

Я випадково видалив таблицю в конструкторі один раз і не зміг її прочитати. Отже, видаляємо цілу модель і читаємо її.

У мене також були проблеми з цим ( модель даних сутності Ado.Net не оновлюється правильно )


1

Це вирішено в останній версії (середовище: VS 2012, .net framework 4.5). Просто відкрийте файл .edmx і додайте необхідні таблиці / збережені процедури / подання. Таблиця / подання, що не має первинного ключа, буде створена як таблиця / подання лише для читання.

У таблиці / поданні "TABLE_NAME" не визначено первинний ключ. Виведено ключ, і визначення було створено як таблицю / подання лише для читання.


1
в деяких випадках помилка залишається в EF 5.0
Грег З.

0

Не потрібно видаляти всю модель (це може бути сотні таблиць!).

Майстер може обробляти "додавання нових" елементів, але деякі зміни, такі як зміна складених клавіш та перейменування стовпців - він не знає, що робити - тому не намагається - і все виходить з синхронізації.

ТАК: ВИДАЛІТЬ таблиці, про які йде мова, із Моделі (концептуальний режим) І з Моделі.Магазин, а потім Оновіть модель за допомогою Майстра та повторно додайте лише відповідні таблиці.


0

Просто викиньте трохи деталей для тих, кому раніше цього не доводилося робити. Я використовую Visual Studio 2013 із встановленим оновленням 4. Я додав деякі поля до таблиці, видалив таблицю зі своєї моделі, а потім перейшов до оновлення, і це не дозволило мені перевірити жодну з таблиць.

У мене є первинний ключ.

Я створив нову тестову таблицю, яка з’явилася, і вона дозволила мені перевірити її, але не мою оригінал.

Я ніколи раніше не відкривав його в XML і не знав, як це зробити. Клацніть правою кнопкою миші файл .edmx і "відкрити за допомогою" - виберіть редактор xml.

у таблиці, про яку йде мова, там було все гаразд, вона навіть мала нові поля (дивно).

Я видалив усі посилання на нього (зайняв кілька разів) - після того, як ви видалите одне і збережете, якщо ви спробуєте відкрити його, і воно не відображатиметься, просто вперед і виберіть "переглянути XML" - подивіться на помилки і в основному стежте за стрибковим м’ячем, поки не очистите його.

сподіваюся, додаткові деталі комусь допоможуть.

Джо


0

Я знайшов один простий спосіб (у SQL Server Management Studio) додати стовпець ідентифікатора типу INT, зняти прапорець "Дозволити нульові значення" та в розділі Властивості стовпця (ідентифікатора) >> Специфікація посвідчення >> перевірити (Ідентифікація) та зробити впевнений приріст встановлений.

Як тільки все буде зроблено, поверніться до вашого вікна .edmx, клацніть правою кнопкою миші та оновіть модель із бази даних.


0

Ви можете додати перехресну таблицю стовпця Первинний ключ. Тоді проблема вирішується


0

Іншим рішенням є забезпечення того, щоб обліковий запис, через який ви отримуєте доступ до бази даних, мав певні дозволи для таблиці. Виберіть принаймні. Таблиця не буде додана, якщо обліковий запис не має для неї дозволів.

У SSMS у розділі Безпека клацніть правою кнопкою миші користувача чи роль, а потім - Властивості. Потім натисніть на Securables. У верхній таблиці наведено таблиці, доступні на даний момент. Якщо відсутні таблиці відсутні, натисніть на пошук і знайдіть, виділіть їх у верхній таблиці, а потім призначте дозволи в нижній таблиці

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.