SL4, EF, Ria Services - Когда удаление происходит или не происходит на стороне сервера, как клиентская сторона узнает, что произошло? - PullRequest
1 голос
/ 23 декабря 2010

Использование Bill Burrows Intro для SL4 и WCF Ria Services - Пример игры в гольф (http://www.myvbprof.com/MainSite/index.aspx#/zSL4_RIA_01),, на который вы не ожидаете взглянуть, но подумал, что добавлю его как отличный маленький учебник для тех, кто хочет немного научиться о сервисах SL4 и WCF Ria на примере VB.NET.

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

Sub DeleteCourse по умолчанию выглядит так:

Public Sub DeleteCourse(ByVal course As Course)
        If (course.EntityState = EntityState.Detached) Then
            Me.ObjectContext.Courses.Attach(course)
        End If
        Me.ObjectContext.Courses.DeleteObject(course)
End Sub

Я изменил его, чтобы он выглядел так, добавив вызов функции и добавив If / Then:

Public Sub DeleteCourse(ByVal course As Course)
    Dim myCourseKeyValue As Integer = CheckForScores(course.CourseKey)

    If myCourseKeyValue = 0 Then
        If (course.EntityState = EntityState.Detached) Then
            Me.ObjectContext.Courses.Attach(course)
        End If
        Me.ObjectContext.Courses.DeleteObject(course)
    End If
End Sub

Итак, в первой строке подпункта DeleteCourse я вызываю функцию CheckForScores, которая выглядит следующим образом:

Private Function CheckForScores(ByVal selectedCourseKey As Integer) As Integer
    Using dc As New Golf_DB1Entities
        Dim myScores = (From o In dc.Scores Where o.CourseKey = selectedCourseKey Select o).Count
        Return myScores
    End Using
End Function

Таким образом, в основном я вызываю функцию CheckForScores, чтобы проверить, существуют ли какие-либо записи в таблице баллов для выбранного курса. Это работает нормально, и я знаю, что, возможно, есть более простой способ получить эту информацию, и я открыт для предложений, но мой фактический вопрос заключается в том, что это сервис, вызываемый из клиента, как только я выясняю, что есть Записи баллов в таблице баллов для выбранного курса (со стороны сервера). Я не удаляю запись из базы данных, но как клиентская часть приложения SL4 узнает, что удаление на самом деле не произошло?

Мне очень жаль, если это не имеет никакого смысла ...

Кроме того, это нормально, что я пометил этот вопрос как VB.NET и C # ???, хотя технически это вопрос VB.NET, я знаю, что большинство пользователей SO используют C # и, вероятно, могут читать через VB. Если это считается недопустимым, дайте мне знать, чтобы я больше не повторял ту же ошибку:).

1 Ответ

0 голосов
/ 24 декабря 2010

Если я вас правильно понимаю, у вас есть дочерняя таблица и родительская таблица, и вы не удаляете родительскую таблицу, если в дочерней записи есть какие-либо записи.Здесь есть два возможных варианта.

Можно было бы просто запросить дважды, один раз, чтобы увидеть, можно ли удалить, и другой раз, чтобы фактически удалить.

Другой вариант - просто вызвать метод на стороне сервера.Вы объявляете метод на стороне сервера, используя InvokeAttribute Метод на стороне сервера может иметь возвращаемое значение, поэтому ваш обратный вызов сможет сообщить вам, было ли что-то удалено или нет.У Google должно быть несколько примеров того, как использовать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...