我对EDM很新,所以请耐心等待。我有一个窗体,其上有一个DataGridView,它与我创建的EDM绑定。我想出了如何更新我的更改,但是当用户创建一个我遇到问题的新行时。
我尝试了很多方法和许多谷歌搜索,但到目前为止没有任何结果。
以下是数据的加载方式:
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条目。
答案 0 :(得分:2)
你需要使用
_Context.MyEntities.AddObject(theNewObject)
这会在调用.SaveChanges()
您没有提供足够的信息来提供更完整的答案,但是创建一个新的实体,并以此方式添加它就是它的归宿。
答案 1 :(得分:1)
发现了这个问题。在我的存储过程映射中,我将Rating_ID设置为结果绑定。在我的存储过程中,我有以下内容:
RETURN SCOPE_IDENTITY()
而不是:
SELECT SCOPE_IDENTITY() AS Rating_ID
我不认为这是一个存储过程问题,因为我知道插入是正确的(我可以自己运行程序)并且没有插入记录。我想当它没有找到Rating_ID作为结果集的一部分时,它删除了记录。