Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Используя EntityFramework обработать ссылочную целостность в sql-таблицах / 22 сообщений из 22, страница 1 из 1
04.11.2014, 11:22
    #38795044
AspUser
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Используя EntityFramework обработать ссылочную целостность в sql-таблицах
Добрый день! Использую WebForms. Столкнулся с такой проблемой что при удалении записи, id которой используется в другой таблице(FOREIGN KEY REFERENCES) возникает исключение. Оно-то и правильно. Предположим что я через попытка-исключение поймаю этот момент
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
 public void DeleteChampionship(Championship myRe)
        {
            context.Championships.Remove(myRe);
            try
            {
                context.SaveChanges();
            }
            catch
            {
                //Ошибка удаления
            }
        }

, но этот метод вызывается в отдельном классе где я не могу сделать Response.Redirect
Вопрос как при такой ошибке выдать отдельную страницу где дать информацию о том в каких строках других таблиц используется удаляемый id ?
...
Рейтинг: 0 / 0
04.11.2014, 11:33
    #38795054
carrotik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Используя EntityFramework обработать ссылочную целостность в sql-таблицах
AspUser,

... может, не стоит доводить до ошибки, а предварительно проверить наличие id в другой таблице чем-то типа select count ... ?
...
Рейтинг: 0 / 0
04.11.2014, 11:40
    #38795061
AspUser
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Используя EntityFramework обработать ссылочную целостность в sql-таблицах
может быть, предположим так и сделаем, но как обойти все таблицы имеющие возможно ссылки на удаляемую строку ?
...
Рейтинг: 0 / 0
04.11.2014, 11:57
    #38795070
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Используя EntityFramework обработать ссылочную целостность в sql-таблицах
AspUserВопрос как при такой ошибке выдать отдельную страницу где дать информацию о том в каких строках других таблиц используется удаляемый id ?Зачем? Какой в этом смысл для пользователя?
...
Рейтинг: 0 / 0
04.11.2014, 12:05
    #38795075
carrotik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Используя EntityFramework обработать ссылочную целостность в sql-таблицах
AspUserможет быть, предположим так и сделаем, но как обойти все таблицы имеющие возможно ссылки на удаляемую строку ?

.. у вас, как мне кажется, подход не совсем верный к тому, что называется громким словом "архитектура" ... Зачем гадать "любит/не любит", если можно заранее ставить строке признак в поле, например, "ext_ref" - yes/no - и по его проверке гасить/не трогать ...
...
Рейтинг: 0 / 0
04.11.2014, 12:06
    #38795076
AspUser
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Используя EntityFramework обработать ссылочную целостность в sql-таблицах
Ну если надо удалить запись, что бы понимать где высвободить ссылку
...
Рейтинг: 0 / 0
04.11.2014, 12:24
    #38795087
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Используя EntityFramework обработать ссылочную целостность в sql-таблицах
AspUserНу если надо удалить запись, что бы понимать где высвободить ссылкуЧтобы "высвободить ссылку", необходимо при создании внешнего ключа на таблицу Championships в базе, указать ON DELETE SET NULL, или ON DELETE SET DEFAULT.
Либо реализовать это самостоятеьно в методе DeleteChampionship.

Пользователь не поймёт сообщения о каких-то FOREIGN KEY REFERENCES. Он говорит на языке предметной области, а не на языке физической модели БД.
...
Рейтинг: 0 / 0
04.11.2014, 12:44
    #38795101
AspUser
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Используя EntityFramework обработать ссылочную целостность в sql-таблицах
Спасибо как вы и подсказали пошел вариантом реализовать алгоритм при удалении получается как-то так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
 public void DeleteRef(int? Id)
        {
            bool freeStr = true;//по умолчанию строка свободна
            //для удаления необходима проверка ни где ли не используется этот Id в других таблицах
            //у которых задан FOREIGN KEY по ChampionshipId на Championships
            //напр. для Clips задано FOREIGN KEY ([ChampionshipId]) REFERENCES [dbo].[Championships] ([Id])
            IEnumerable<Clip> useRef = repo.Clips.Where(u => u.ChampionshipId == Id);
            if (useRef != null)
            {
                freeStr = false;
                //показать где используется
            }
            if (freeStr)
            {
                //спокойно можно удалять
                Championship myRe = repo.Championships.Where(p => p.Id == Id).FirstOrDefault();
                if (myRe != null)
                {
                    repo.DeleteChampionship(myRe);
                }
            }
        }

просто в будущем хочется сделать один метод передав в который имя таблицы можно будет собрать список таблиц ссылающихся на нее.
...
Рейтинг: 0 / 0
04.11.2014, 12:51
    #38795109
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Используя EntityFramework обработать ссылочную целостность в sql-таблицах
AspUser, зачем Вам никому не нужный метод?
...
Рейтинг: 0 / 0
04.11.2014, 12:57
    #38795115
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Используя EntityFramework обработать ссылочную целостность в sql-таблицах
T-SQL:
Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT name                 AS foreign_key_name,
       OBJECT_NAME(parent_object_id)
                            AS child_table_name
FROM   sys.foreign_keys
WHERE  referenced_object_id = OBJECT_ID('Championships')
ORDER BY
       child_table_name
...
Рейтинг: 0 / 0
04.11.2014, 16:27
    #38795314
ViPRos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Используя EntityFramework обработать ссылочную целостность в sql-таблицах
ты думаешь там только один уровень зависимостей?
ты думаешь у тебя море прав обойти вес граф зависимостей?
и это при каждом чихе (даже если есть права)?
...
Рейтинг: 0 / 0
04.11.2014, 16:33
    #38795317
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Используя EntityFramework обработать ссылочную целостность в sql-таблицах
ViPRosты думаешь там только один уровень зависимостей?
В условиях задачи этого не было. Будет 2 уровня зависимостей, будем писать аналитику. Твои обобщения идут лесом.

ViPRosты думаешь у тебя море прав обойти вес граф зависимостей?
Причем тут права? О них вообще не было речи.

ViPRosи это при каждом чихе (даже если есть права)?
Никаких каждых чихов. Решается конкретная задача. Выдумывать новые требования, обобщать логику на пустом месте и раздувать губы от того, что ты поборол коня в вакууме - не есть правильный способ решить задачу.
...
Рейтинг: 0 / 0
04.11.2014, 17:14
    #38795360
ViPRos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Используя EntityFramework обработать ссылочную целостность в sql-таблицах
МСУ,
угу вот и каждый день и "решаете" одни и те же "задачи"
подфорум "проектирование БД" изо дня в день в течении последних 7-8 лет задает один и тот же вопрос - как смоделировать Объект с динамическими свойствами (а других объектов в жизни не существуют, только артефакты в статике) и решают, решают...
...
Рейтинг: 0 / 0
04.11.2014, 17:18
    #38795367
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Используя EntityFramework обработать ссылочную целостность в sql-таблицах
ViPRosМСУ, угу вот и каждый день и "решаете" одни и те же "задачи"
Есть требования - есть решение. Зачем что-то еще сюда пихать?

ViPRosподфорум "проектирование БД" изо дня в день в течении последних 7-8 лет задает один и тот же вопрос - как смоделировать Объект с динамическими свойствами (а других объектов в жизни не существуют, только артефакты в статике) и решают, решают...
Какое это имеет отношение к топику?
...
Рейтинг: 0 / 0
04.11.2014, 17:26
    #38795380
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Используя EntityFramework обработать ссылочную целостность в sql-таблицах
AspUserДобрый день! Использую WebForms. Столкнулся с такой проблемой что при удалении записи, id которой используется в другой таблице(FOREIGN KEY REFERENCES) возникает исключение. Оно-то и правильно. Предположим что я через попытка-исключение поймаю этот момент
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
 public void DeleteChampionship(Championship myRe)
        {
            context.Championships.Remove(myRe);
            try
            {
                context.SaveChanges();
            }
            catch
            {
                //Ошибка удаления
            }
        }

, но этот метод вызывается в отдельном классе где я не могу сделать Response.Redirect
Вопрос как при такой ошибке выдать отдельную страницу где дать информацию о том в каких строках других таблиц используется удаляемый id ?На уровне контроллера или фильтра контроллера сделать централизованный анализ исключений с редиректом в соответствующем случае. Можно сделать сообщение общего вида: "Нельзя удалять объект, на который ссылаются другие объекты". Можно из сообщения об ошибке извлечь имя foreign key и вывести более подробное сообщение.
...
Рейтинг: 0 / 0
04.11.2014, 17:29
    #38795384
ViPRos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Используя EntityFramework обработать ссылочную целостность в sql-таблицах
Алексей К Можно сделать сообщение общего вида: "Нельзя удалять объект, на который ссылаются другие объекты". Можно из сообщения об ошибке извлечь имя foreign key и вывести более подробное сообщение.
ну а что дальше делать? ему то ваще то надо удалить эту запись :) кому звонить то?
...
Рейтинг: 0 / 0
04.11.2014, 17:46
    #38795403
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Используя EntityFramework обработать ссылочную целостность в sql-таблицах
ViPRosАлексей К Можно сделать сообщение общего вида: "Нельзя удалять объект, на который ссылаются другие объекты". Можно из сообщения об ошибке извлечь имя foreign key и вывести более подробное сообщение.
ну а что дальше делать? ему то ваще то надо удалить эту запись :) кому звонить то?+100500

На фиг это не нужно пользователю.
...
Рейтинг: 0 / 0
04.11.2014, 17:48
    #38795406
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Используя EntityFramework обработать ссылочную целостность в sql-таблицах
ViPRosты думаешь там только один уровень зависимостей?
ты думаешь у тебя море прав обойти вес граф зависимостей?
и это при каждом чихе (даже если есть права)?Это ты меня спросил? Лично я не думаю, я вижу, что там.
Тут гением не надо быть, по коду ТС все читается.
...
Рейтинг: 0 / 0
04.11.2014, 17:58
    #38795416
ViPRos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Используя EntityFramework обработать ссылочную целостность в sql-таблицах
skyANA,
да ни к кому нет у меня вопросов и претензий
вот раньше мужик был, Райкин звали, он никаких вопросов и претензий тоже не имел, но у него это получалось лучше
...
Рейтинг: 0 / 0
04.11.2014, 18:53
    #38795471
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Используя EntityFramework обработать ссылочную целостность в sql-таблицах
ViPRosАлексей К Можно сделать сообщение общего вида: "Нельзя удалять объект, на который ссылаются другие объекты". Можно из сообщения об ошибке извлечь имя foreign key и вывести более подробное сообщение.
ну а что дальше делать? ему то ваще то надо удалить эту запись :) кому звонить то?Скорее всего - ничего. Обычно такие записи неудаляемы. Но возможность удаления нужна: например ошибочно был добавлен "сотрудник", пока он ни в каких оперативных журналах не фигурирует, его можно удалить.
...
Рейтинг: 0 / 0
04.11.2014, 19:02
    #38795485
carrotik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Используя EntityFramework обработать ссылочную целостность в sql-таблицах
Алексей КViPRosпропущено...

ну а что дальше делать? ему то ваще то надо удалить эту запись :) кому звонить то?Скорее всего - ничего. Обычно такие записи неудаляемы. Но возможность удаления нужна: например ошибочно был добавлен "сотрудник", пока он ни в каких оперативных журналах не фигурирует, его можно удалить.

... здесь, скорее всего, подход 1С более эффективен - до проводки документа можно делать всякие безобразия, а вот на этапе проводки он вам все и выскажет ...
...
Рейтинг: 0 / 0
04.11.2014, 20:10
    #38795556
ViPRos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Используя EntityFramework обработать ссылочную целостность в sql-таблицах
Алексей КСкорее всего - ничего. Обычно такие записи неудаляемы. Но возможность удаления нужна: например ошибочно был добавлен "сотрудник", пока он ни в каких оперативных журналах не фигурирует, его можно удалить.
тут скорее не об "неудаляемости" надо говоритть, а о "не опубликованности", как справедливо заметил коротких
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Используя EntityFramework обработать ссылочную целостность в sql-таблицах / 22 сообщений из 22, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]