Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Entity Framework. Ассоциация, между свойствами одной сущности 
V
    Опции темы
-Mikle-
Дата 6.5.2009, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 1
Всего: 59



Есть таблица в БД, хранящая древовидную структуру категорий:
Category (ID, ParentID, Title)  - ParentID это ID категории-родителя

Хочу чтобы каждый Category содержал набор дочерних Category. То есть так, как это происходит при описании ассоциации 1/* между двумя сущностями (в моем случае есть Category.FileParts).
Вручную создать ассоциацию между двумя свойствами одной сущности не выходит, пишет ошибку, если имеет значение какую, я скопирую текст. В БД (MS SQL Server 2008) такая связь тоже не прокатывает. Что делать, кто знает?


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
PashaPash
Дата 6.5.2009, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 8
Всего: 49



-Mikle-, какую ошибку выдает MS SQL Server 2008 Management Studio? Или что она пишет в ответ на 
Код

ALTER TABLE dbo.Category ADD CONSTRAINT
    FK_Category_Category FOREIGN KEY
    (
    ParentID
    ) REFERENCES dbo.Category
    (
    ID
    ) ON UPDATE  NO ACTION 
     ON DELETE  NO ACTION 



--------------------
PM MAIL WWW   Вверх
-Mikle-
Дата 6.5.2009, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 1
Всего: 59



PashaPash
Цитата

Таблица "Category"
- Не удается создать отношение "FK_Category_Category".  
Конфликт инструкции ALTER TABLE с ограничением FOREIGN KEY SAME TABLE "FK_Category_Category". Конфликт произошел в базе данных "e:\temp\test.mdf", таблица "dbo.Category", column 'ID'.





--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
PashaPash
Дата 6.5.2009, 21:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 8
Всего: 49



-Mikle-, у тебя сейчас есть записи с ParentId без соответствующих Id. Подчисти их - перестанет ругаться


--------------------
PM MAIL WWW   Вверх
-Mikle-
Дата 6.5.2009, 21:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 1
Всего: 59



Цитата(PashaPash @  7.5.2009,  00:23 Найти цитируемый пост)
Подчисти их - перестанет ругаться 

Да, действительно это помогло. Спасибо.

Модель обновил, ассоциация добавилась, но теперь ошибка компиляции:
Цитата

Ошибка 3007: Проблема во фрагментах сопоставления, начиная со строк (231, 250): Столбцы, не относящиеся к первичному ключу [ParnetID], сопоставлены в обоих фрагментах с разными свойствами концептуальной стороны. Возможна несогласованность данных, поскольку соответствующие свойства концептуальной стороны можно изменять независимо друг от друга.


Я с EF первый раз работаю, нету опыта вообще.

Добавлено через 8 минут и 50 секунд
Кстати, так как таблица пустая, теперь нельзя добавить ни одной записи. Я так понимаю из-за той же проблемы с ограничением
user posted image



--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
PashaPash
Дата 7.5.2009, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 8
Всего: 49



-Mikle-, сделай Scrtipt Table / Create To / Clipboard и сбрось сюда.
Должно быть что-то вроде:
Код

...
CREATE TABLE [dbo].[Category](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [ParentID] [int] NULL,
    [Title] [nchar](10) NOT NULL,
 CONSTRAINT [PK_Table_1] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

ALTER TABLE [dbo].[Category]  WITH CHECK ADD  CONSTRAINT [FK_Category_Category] FOREIGN KEY([ParentID])
REFERENCES [dbo].[Category] ([ID])
GO

ALTER TABLE [dbo].[Category] CHECK CONSTRAINT [FK_Category_Category]
GO

Цитата(-Mikle- @  6.5.2009,  21:42 Найти цитируемый пост)
Модель обновил, ассоциация добавилась, но теперь ошибка компиляции:

ParentId - первичный ключ? 

Цитата(-Mikle- @  6.5.2009,  21:42 Найти цитируемый пост)
Кстати, так как таблица пустая, теперь нельзя добавить ни одной записи. Я так понимаю из-за той же проблемы с ограничением

Сделай ParentId nullalble.


--------------------
PM MAIL WWW   Вверх
-Mikle-
Дата 7.5.2009, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 1
Всего: 59



Цитата(PashaPash @  7.5.2009,  16:27 Найти цитируемый пост)
Должно быть что-то вроде

да, соответствует, кроме ParentID null. 

Цитата(PashaPash @  7.5.2009,  16:27 Найти цитируемый пост)
ParentId - первичный ключ? 

Нет. Он не может быть им.

Цитата(PashaPash @  7.5.2009,  16:27 Найти цитируемый пост)
Сделай ParentId nullalble

Это меня устраивает, даже более логичнее, что корневые категории имеют родителя null, вместо родителя с ID=0. Вот теперь понятно почему SQL-ошибка была и к чему все шло smile .

Сделал в БД, обновил модель, не заработало, все та-же ошибка компиляции. Решил пересоздать модель заново. Удалил полностью модель и создал заново и, о чудо, чудо, заработало!!!  smile  Переименовал свойства навигации в Parent и Childs. Теперь все стало так как мне надо.
Правда в сущности нет свойства ParenID, и оно мне, в принципе, не нужно, так как теперь у меня есть cat.Parent.ID, что даже, опять таки, более логично чем cat.ParentID. Огромное спасибо за помощь! +1 в копилку тебе.

На самом деле, конечно же, это не чудо. Можно было бы просто удалить свойство ParentID и не пришлось бы пересоздавать модель. Теперь мне понятно о какой несогласованности данных говорила ошибка
Цитата

........ Возможна несогласованность данных, поскольку соответствующие свойства концептуальной стороны можно изменять независимо друг от друга

То есть наличие двух свойств ParentID и Parent могло бы привести к несогласованности. 

Спасибо еще раз, что помог разобраться!


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Базы данных под .NET | Следующая тема »


 




[ Время генерации скрипта: 0.1012 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.