|
|
|
LINQtoSQL: как задать атрибут DeleteRule на удаление родительской записи по внешнему ключу
|
|||
|---|---|---|---|
|
#18+
Вот что удалось нагуглить по сабжу. цитатаLINQ to SQL does not provide a cascade delete feature. Your database must be setup to do this on its own. The 'DeleteRule' property in the mapping is only used during a CreateDatabase call to tell the database to do cascade delete for this relationship, and to warn LINQ to SQL that cascading could happen. P.S. Опять же, ссылка на документацию было бы лучше, но ничего не нашел... :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2010, 09:11 |
|
||
|
LINQtoSQL: как задать атрибут DeleteRule на удаление родительской записи по внешнему ключу
|
|||
|---|---|---|---|
|
#18+
Огромное спасибо за ссылку!!!!! Все ж мало я гуглю))) Ща изучим! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2010, 09:21 |
|
||
|
LINQtoSQL: как задать атрибут DeleteRule на удаление родительской записи по внешнему ключу
|
|||
|---|---|---|---|
|
#18+
Безусловно интересные соображения по поводу, что в общем случае каскадное удаление может оказаться слишком сложным для реализации, поэтому такая фитча и отсутствует... Frans BoumaI'm not sure why Linq to Sql gives up here, but in general in o/r mappers: cascading deletes aren't really going to work. Sure there are cases where they do work, but in general they don't because with 2 or more paths from entity E1 to entity E2 in the model, it's already not possible to have E2 instances deleted when E1 is deleted in most cases. SqlServer for example will also give up in some situations in this case. Как я понимаю следующее: авторLINQ to SQL does not provide a cascade delete feature. Your database must be setup to do this on its own. 1)LINQ to SQL не предоставляет средства каскадного удаления. Ваша СУБД должна быть настроена на каскадное удаление вручную. авторThe 'DeleteRule' property in the mapping is only used during a CreateDatabase call to tell the database to do cascade delete for this relationship, and to warn LINQ to SQL that cascading could happen. 2)Свойство 'DeleteRule' используется только при выполнении метода CreateDatabase, чтобы сообщить СУБД о том, что по этой связи необходимо выполнять каскадное удаление, а также предупредить Linq2SQL об этом. Не понятно, как СУБД уведомляется, если в результате CreateDatabase CASCADE на этой связи не выставляется, а остается NO ACTION P.S.: по всей видимости, проще положится на себя и удалить все имеющиеся дочерние строки вручную...хотя, скажем если Linq этого и не умеет, то из БД при помощи, например, хранимой процедуры можно вызвать автоматическое каскадное удаление, поэтому флаг CASCADE должен как-то выставляться))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2010, 09:47 |
|
||
|
LINQtoSQL: как задать атрибут DeleteRule на удаление родительской записи по внешнему ключу
|
|||
|---|---|---|---|
|
#18+
я это и говорил. buredКроме dbml в схеме БД правило должно стоять. У меня работает нормально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2010, 13:59 |
|
||
|
LINQtoSQL: как задать атрибут DeleteRule на удаление родительской записи по внешнему ключу
|
|||
|---|---|---|---|
|
#18+
Накати update ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2010, 14:00 |
|
||
|
LINQtoSQL: как задать атрибут DeleteRule на удаление родительской записи по внешнему ключу
|
|||
|---|---|---|---|
|
#18+
ЗЫ. Чтобы накатить апдейт на внешний ключ, его надо грохнуть и создать с нужной опцией. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2010, 14:03 |
|
||
|
LINQtoSQL: как задать атрибут DeleteRule на удаление родительской записи по внешнему ключу
|
|||
|---|---|---|---|
|
#18+
bured, я Вас все равно не понимаю... Понятно, что в самой СУБД на нужной связи должно CASCADE стоять, но важно, чтобы это не вручную делать, а чтобы при выполнении DataContext.CreateDatabase() данный флаг проставлялся...я ещё понимаю, если б в LINQ вообще это отсутствовало, но ведь есть, а не работает... buredЧтобы накатить апдейт на внешний ключ, его надо грохнуть и создать с нужной опцией. БД, в том числе и связи по внешнему ключу генерируются при помощи DataContext.CreateDatabase() на основе имеющегося dbml файла, все запросы SQL генерируются LINQ автоматически...и уж если в dbml файле указано, что удаление должно быть каскадным, то логично ожидать, что сгенерированный LINQ запрос будет содержать что-то в подобное: Код: plaintext 1. Вот и вопрос: должна ли??? Или все-таки LINQ этого ни хрена не поддерживает, поэтому при генерации БД при помощи CreateDatabase нужно вручную в БД заливать не только тригеры, хранимые и пользовательские процедуры, но и при необходимости правила удаления\изменения по связям.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2010, 04:12 |
|
||
|
LINQtoSQL: как задать атрибут DeleteRule на удаление родительской записи по внешнему ключу
|
|||
|---|---|---|---|
|
#18+
хз, у меня удаляется каскадно. LINQtoSQL тоже. Ты где-то запутался. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2010, 05:35 |
|
||
|
LINQtoSQL: как задать атрибут DeleteRule на удаление родительской записи по внешнему ключу
|
|||
|---|---|---|---|
|
#18+
Направление какое: 1)БД генерится при помощи LINQ 2)или dbml схема генерится на основе БД (при помощи SQLMetal или дизайнера VS) ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2010, 06:33 |
|
||
|
LINQtoSQL: как задать атрибут DeleteRule на удаление родительской записи по внешнему ключу
|
|||
|---|---|---|---|
|
#18+
buredхз, у меня удаляется каскадно. LINQtoSQL тоже. Ты где-то запутался. Андрей, речь о CreateDatabase. Этот метод действительно создает БД и сущности, игноря заданные DeleteRule в них... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2010, 11:34 |
|
||
|
LINQtoSQL: как задать атрибут DeleteRule на удаление родительской записи по внешнему ключу
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2010, 12:03 |
|
||
|
LINQtoSQL: как задать атрибут DeleteRule на удаление родительской записи по внешнему ключу
|
|||
|---|---|---|---|
|
#18+
Огромное спасибо!!!!!!!!!!! Интересно, что это сообщение от 2008 года...сегодня framework 4.0 уже, а до сих пор ничего не исправлено..., хотя, может, и есть какие-нибудь исправления.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2010, 12:52 |
|
||
|
LINQtoSQL: как задать атрибут DeleteRule на удаление родительской записи по внешнему ключу
|
|||
|---|---|---|---|
|
#18+
Вообщем, нашел, как излечить баг. Генератор почему-то не добавляет EntitySet DeleteRule. Поможем ему ручками: добавим DeleteRule = "CASCADE" в EntitySet парентовой сущности (Activity): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2010, 12:54 |
|
||
|
LINQtoSQL: как задать атрибут DeleteRule на удаление родительской записи по внешнему ключу
|
|||
|---|---|---|---|
|
#18+
Я замечание по ссылке прочитал, там ж написано, что файл designer.cs перегенеривается каждый раз при построении проекта, то есть его править каждый раз придется..? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2010, 13:21 |
|
||
|
LINQtoSQL: как задать атрибут DeleteRule на удаление родительской записи по внешнему ключу
|
|||
|---|---|---|---|
|
#18+
horghфайл designer.cs перегенеривается каждый раз при построении проекта, то есть его править каждый раз придется..? Файл designer.cs перегенеряется только при ручном Run Custom Tool или после того, как что-то меняем в dbml. При билде проекта designer.cs остается таким же, как был. P.S. Я Вас понимаю, но ничего не поделаешь. Даже partial класс не спасет, так как нам нужно подправить атрибут члена класса... P.S2. Все вопросы к тупым индусам, которые генерацию DeleteRule воткнули в чилда, а не в родителя. Уродынах... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2010, 13:28 |
|
||
|
LINQtoSQL: как задать атрибут DeleteRule на удаление родительской записи по внешнему ключу
|
|||
|---|---|---|---|
|
#18+
Могу посоветовать, разве что, забить на каскадность, если юзаете Linq to SQL. Каскадность выполнять ручками через свой DAL. Я бы так и сделал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2010, 13:31 |
|
||
|
LINQtoSQL: как задать атрибут DeleteRule на удаление родительской записи по внешнему ключу
|
|||
|---|---|---|---|
|
#18+
МСУАндрей, речь о CreateDatabase. Этот метод действительно создает БД и сущности, игноря заданные DeleteRule в них... А, ну да. Натыкался на это не раз. Я что-то думал "так и задумано". :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2010, 14:35 |
|
||
|
LINQtoSQL: как задать атрибут DeleteRule на удаление родительской записи по внешнему ключу
|
|||
|---|---|---|---|
|
#18+
Вот если решить бы задачу переопределения атрибутов, то проблем бы не было... Вот простая задачка: Имеет автогенеренный класс Foo (его трогать нельзя): Код: plaintext 1. 2. 3. 4. Теперь я создаю свой partial class Foo: Код: plaintext 1. 2. 3. Задача: переопределить AssociationAttribute в FooProperty на IsUnique = false. P.S. Пробовал через MetadataType - нихрена не получается... Цепляется только первый класс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2010, 14:45 |
|
||
|
LINQtoSQL: как задать атрибут DeleteRule на удаление родительской записи по внешнему ключу
|
|||
|---|---|---|---|
|
#18+
А в Entity Framework всё правильно работает: Код: plaintext 1. 2. 3. 4. 5. SQL Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. P.S. Еще один камень в огород L2S и еще один плюс смотреть в сторону EF... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2010, 16:31 |
|
||
|
LINQtoSQL: как задать атрибут DeleteRule на удаление родительской записи по внешнему ключу
|
|||
|---|---|---|---|
|
#18+
Ещё раз спасибо!)) Да уж атрибут класса не переопределишь..partial класс штука удобная, но не на столько)) Методы частичными они сделали, а вот атрибуты..)) Скорее всего? так же остановимся на варианте, где каскадное удаление происходит минуя L2S, да и генерировать соответствующие правила в БД тоже придется дополнительными запросами помимо CreateDatabase.... С другой стороны, к своему позору, EntityFramework нужно тоже только изучать, а задачку уже взялись решать на L2S, и времени на изучение ещё чего-то нового уже нету. Прочитав вот эту статейку http://habrahabr.ru/linker/go/37390/, создалось впечатление, что EntityFramework скорее подходит для нашего подхода в разделении уровней доступа к данным и сущностей предметной области. Однако ж пока L2S...)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2010, 04:15 |
|
||
|
|

start [/forum/topic.php?fid=17&gotonew=1&tid=1351209]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
40ms |
get topic data: |
9ms |
get first new msg: |
4ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
2ms |
| others: | 240ms |
| total: | 382ms |

| 0 / 0 |
