Entity Data Model & DataGridView - Создание новых объектов - PullRequest
1 голос
/ 30 марта 2010

Я довольно новичок в EDM, так что терпите меня. У меня есть форма Windows с DataGridView, которая связана с EDM, который я создал. Я понял, как обновить свои изменения, но когда пользователь создает новую строку, у меня возникает проблема.

Я пробовал множество способов и множество поисков в Google, но пока ничего не придумал.

Вот как загружаются данные:

    Dim boilerID As Integer = DirectCast(ddlBoiler.SelectedValue, Integer)
    Dim countryID As Integer = DirectCast(ddlCountry.SelectedValue, Integer)

    Dim ratings = From r In _Context.Rating _
                 Where r.Boiler.Boiler_ID = boilerID _
                 And r.Country.Country_ID = countryID _
                 Order By r.Sequence _
                 Select r

    RatingBindingSource.DataSource = ratings.ToList()

Кроме того, все, что я сейчас делаю для сохранения информации, это следующее:

Private Sub btnSave_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSave.Click
    _Context.SaveChanges()
End Sub

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

Я могу включить некоторые методы, которые я пытался добавить для новых предметов, если кому-то нужно это увидеть.

Спасибо!

ОБНОВЛЕНИЕ: вот один из методов, которые я пытался добавить для новых объектов, и полученная ошибка:

    For Each dgvr As DataGridViewRow In dgvRatings.Rows
        If dgvr.DataBoundItem IsNot Nothing AndAlso CType(dgvr.DataBoundItem, Rating).Rating_ID <= 0 Then

            Dim r As Rating = dgvr.DataBoundItem
            r.Boiler = ddlBoiler.SelectedItem
            r.Country = ddlCountry.SelectedItem

            _Context.AddObject("Rating", r)
        End If
    Next

Ошибка (возникает при вызове _Context.SaveChanges ()): оператор обновления, вставки или удаления магазина затронул неожиданное количество строк (0). Объекты могут быть изменены или удалены с момента загрузки объектов. Обновите записи ObjectStateManager.

Ответы [ 2 ]

2 голосов
/ 30 марта 2010

вам нужно использовать

_Context.MyEntities.AddObject(theNewObject)

Регистрирует созданный объект для вставки при вызове .SaveChanges()

Вы не дали достаточно информации, чтобы дать более полные ответы, но создание новой сущности и добавление ее таким образом - вот к чему все сводится.

1 голос
/ 31 марта 2010

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

RETURN SCOPE_IDENTITY()

Вместо:

SELECT SCOPE_IDENTITY() AS Rating_ID

Я не думал, что это проблема с сохраненным процессом, так как я знал, что вставка была правильной (я мог запустить процедуру самостоятельно), и записи не были вставлены. Я думаю, что когда он не нашел Rating_ID как часть набора результатов, он удалил запись.

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