2010-03-30 68 views
1

我對EDM相當陌生,因此請耐心等待。我有一個窗體,其上有一個DataGridView,它與我創建的EDM綁定。我想出瞭如何更新我的更改,但是當用戶創建一個新的行時,我遇到了問題。實體數據模型&DataGridView - 創建新對象

我嘗試了很多方法和許多谷歌搜索,但到目前爲止沒有提到任何東西。

這裏的數據是如何加載:

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條目。

回答

1

發現此問題。在我的存儲過程映射中,我將Rating_ID設置爲結果綁定。在我的存儲過程我有以下幾點:

RETURN SCOPE_IDENTITY() 

相反的:

SELECT SCOPE_IDENTITY() AS Rating_ID 

我不認爲這是一個存儲過程的問題,因爲我知道插件是正確的(我可以運行的程序本身)並沒有插入記錄。我想當它沒有找到Rating_ID作爲結果集的一部分時,它會刪除記錄。

2

你需要使用

_Context.MyEntities.AddObject(theNewObject) 

這寄存器即可插入所創建的對象調用.SaveChanges()

時,未提供足夠的信息,以提供更完整的答案,但創建一個新的實體,並以這種方式添加它就是它的結果。

+0

謝謝你的迴應。我嘗試了類似的東西。查看我的更新,獲取我收到的錯誤。 – VinPepe 2010-03-30 19:17:47

相關問題