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

Структура сущности - "Проблема в отображении фрагментов" - безотлагательно. Помогите мне понять объяснения этой ошибки

  

Ошибка 3007: проблема при сопоставлении Фрагменты, начинающиеся с строк 186, 205: столбцы с непервичными ключами [WheelID] сопоставляются в обоих фрагментах с различными концептуальными свойствами стороны - возможна несогласованность данных, поскольку соответствующая концептуальная сторона свойства могут быть независимо изменены.

  

Я нашел несколько мест в Интернете, описывающих эту ошибку, но я просто не понимаю их. (путаный смайлик идет сюда)

One
Два
Три
Четыре

Здесь есть что-то очень важное, я, должно быть, пропал без вести. Можете ли вы это объяснить, чтобы я это понял? Может быть, мой пример реальной жизни ниже?

alt text http://i39.tinypic.com/2hppnoo.jpg

Внешний ключ 1: N Wheels.Id → Slices.WheelId

Я добавляю их в инфраструктуру сущности, а WheelId не отображается в объекте Slices.

alt text http://i43.tinypic.com/287hq87.jpg

Выполнение некоторого обходного пути (удаление отношения из db перед добавлением таблиц в EF - затем повторное создание и обновление EF) Мне удалось заставить WheelId оставаться в срезах, но затем я получаю указанную выше ошибку.

4b9b3361

Ответ 1

Так как Slices.WheelId - это FK, вы не можете разоблачить его в своей модели клиента, периоде. Однако есть способы получить значение.

var wheelId = someSlice.Wheels.ID;

Обновление В EF 4 вы можете сделать это, используя ассоциации FK вместо независимых ассоциаций.

Ответ 2

Попробуйте удалить столбец внешних свойств из набора Entity, используя конструкцию модели сущности, она решит вашу проблему.

Например

У нас есть две таблицы: клиент, а другой - заказ, при использовании модели сущностей мы добавили связь между клиентами и заказами, когда мы делаем эту структуру сущностей Ado.net я добавлю свойства навигации для обеих таблиц.

Как Customer.Orders - Здесь список заказов Заказ. Заказчик

Одно - много отношений.

Поэтому нам нужно удалить свойство из имени CustomerId [столбца внешнего ключа] из набора Заказ.

Для справки:

http://social.msdn.microsoft.com/forums/en-US/adodotnetentityframework/thread/2823634f-9dd1-4547-93b5-17bb8a882ac2/

Ответ 3

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

Однако, когда я это сделал, я получил ошибку отображения. Мне потребовалось ПОЧЕМУ, но я понял. То, что я сделал, было связано с ассоциацией, использующей инструмент объединения объектов объекта, и вам нужно дважды щелкнуть по линии связи (от 1 до многих) и установить там первичный и внешний ключ. Надеюсь, это поможет другим, у кого может быть такая же проблема. Я не мог найти ответ нигде.

Ответ 4

Я смог преодолеть эту проблему следующими шагами: щелкните правой кнопкой мыши окно конструктора Выберите "модель обновления из базы данных" Выберите "Добавить" и убедитесь, что установлен флажок "Включить столбцы внешнего ключа в модели". нажмите "Готово"...

Ответ 5

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

У меня есть таблица, участвующая в моей модели, с двоичным столбцом, где хранятся данные изображения. Я хочу, чтобы эти данные возвращались, когда мне это нужно (производительность - это функция), поэтому я разбил таблицу, используя метод, аналогичный this. Позже я добавил свойство в эту таблицу, а затем обновил модель из базы данных. Мастер добавил свойство в оба типа сущностей, которые ссылаются на таблицу с добавленным свойством. Я должен был удалить его из одного из них, чтобы решить эту ошибку.

Ответ 6

У меня это произошло, потому что мастер обновления платформы Entity Framework не отображал некоторые ключи (или не обновлялся?). В результате некоторые столбцы были ошибочно помечены как ключи, а фактические ключевые столбцы рассматривались как простые столбцы.

Решение заключалось в том, чтобы вручную открыть файл EDMX, найти сущности и обновить ключи.

Ответ 7

Для запросов LinQ to Entities в EF1 мой обходной путь для того, чтобы не иметь доступ к внешнему ключу в качестве свойства, имеет следующий код, который не вызывает запрос присоединения к связанной таблице:

dbContext.Table1s.FirstOrDefault(c => (int?)c.Table2.Id == null)

i.e, сгенерированный SQL:

...WHERE ([Extent1].[Table2Id] IS NULL)...

Ответ 8

Решение состоит в том, чтобы разрешить исключение Rule = Cascade в ассоциации Sql.

То же самое, что и в .edmx-модели, добавив элемент в ассоциации:

<Association Name="FK_Wheels_Slices">
          <End Role="Wheels" Type= "your tipe here" Multiplicity="1">
          <OnDelete Action="Cascade" />
          </End>
 </Association>

Ответ 9

У меня была таблица, уже сопоставленная в EF. Я добавил еще две таблицы с внешними ключами в ранее добавленной таблице. Затем я получил ошибку 3007.

Чтобы исправить ошибку, я удалил все три таблицы из файла EDMX, а затем повторно добавил их сразу вместе (через "Обновить модель из базы данных..." ), а не поэтапно.

Ответ 10

Не удалось получить какой-либо ответ на работу с EF6. Проблема заключается в том, что структура не импортирует внешние ключи правильно, как ассоциации. Мое решение заключалось в удалении внешних ключей из таблиц, а затем вручную добавлении ассоциаций с использованием модели Entity Framework, используя следующие шаги: Entity Framework - добавить свойство навигации вручную