Есть ли другие варианты, доступные для устранения этой проблемы удаления в Lightswitch? - PullRequest
1 голос
/ 08 сентября 2011

Я разместил этот вопрос на форуме светового переключателя и ничего не получил.Я подумал, что попробую еще раз, прежде чем отказаться от Lightswitch.

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

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

entity.simpleChild.Delete();

foreach (var child in entity.complexChild)
{
    ((IEntityObject)child).Delete();
}

foreach (var child in entity.ChildWithGrandChildren)
{
    foreach (var grandChild in child.Children)
    {
        ((IEntityObject)grandChild).Delete();
    }
    child.Delete();
}

Однако один из моих типов сущностей не работает.У этой сущности есть внуки, но я тоже их удаляю.Кроме того, когда я комментирую удаление внуков и пытаюсь удалить объект, у которого нет связанных внуков, я получаю ту же ошибку.Я удаляю все в том же порядке, что и скрипт TSQL, который работает.Однако во время выполнения я получаю эту ошибку:

Операция не выполнена: отношение не может быть изменено, так как одно или несколько свойств внешнего ключа не могут иметь значение NULL.Когда в отношение вносится изменение, для соответствующего свойства внешнего ключа устанавливается нулевое значение.Если внешний ключ не поддерживает нулевые значения, необходимо определить новое отношение, свойству внешнего ключа должно быть назначено другое ненулевое значение или несвязанный объект должен быть удален.

КогдаЯ профилирую базу данных, я вижу множество вариантов выбора, но попыток удаления нет, поэтому Lightswitch просто думает, что будет проблема.Что я могу сделать, чтобы выяснить, где проблема?Удаление различных связанных сущностей из модели никогда не приводит к какому-либо другому сообщению.

Ответы [ 2 ]

0 голосов
/ 25 октября 2013

У меня была та же проблема, и я обнаружил, что другой разработчик поместил код в события удаления и удаления для дочернего объекта, и этот код вызвал ошибку.

Надеюсь, что это поможет другим, сталкивающимся с той же проблемой.

0 голосов
/ 12 сентября 2011

Вот пример кода, который может успешно удалить связь из 3 частей: Персона - Ребенок - Внук в приложении VS LightSwitch. В определениях таблиц SQL-сервера используется DELETE NO ACTION, как в вашем примере.

    partial void People_Deleting(Person entity)
    {
        foreach (var child in entity.Children)
        {
            foreach (var grandchild in child.GrandChildQuery)
            {
                ((IEntityObject)grandchild).Delete();
            }

            child.Delete();
        }
    }

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

...