Структура сущности - "Проблема в отображении фрагментов" - безотлагательно. Помогите мне понять объяснения этой ошибки
Ошибка 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 оставаться в срезах, но затем я получаю указанную выше ошибку.
Ответы
Ответ 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 - добавить свойство навигации вручную