无法使用Entity Framework保存记录

时间:2013-04-02 00:20:17

标签: vb.net winforms frameworks entity

有人可以帮忙吗?

我是一个绝对的初学者。但我在网上搜索。 VB中没有很多示例显示在其中。

我创建了一个包含win形式的测试项目。然后添加另一个包含实体模型的项目,在构建模型之后,我将此引用添加到Win表单项目中。之后我将Model对象添加为数据源。

我将数据源控件拖到表单中并添加了以下代码。

Private context As TestModelEntities

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    context = New TestModelEntities

    Dim query = context.employees
    EmployeeBindingSource.DataSource = query.ToList




End Sub

Private Sub DepartmentBindingNavigatorSaveItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles EmployeeBindingNavigatorSaveItem.Click



    Try
        context.SaveChanges()
        MessageBox.Show("Changes saved to the database.")
        Me.Refresh()
    Catch ex As Exception
        MessageBox.Show(ex.Message)
    End Try
End Sub

我整天都在挠头。不知道我做错了什么。

2 个答案:

答案 0 :(得分:0)

DepartmentBindingNavigatorSaveItem_Click方法中,您似乎在调用context之前未向context.SaveChanges()添加任何内容。

因此,实体框架不知道任何新添加的实体,也不会持久化它们。

尝试将您的实体添加到上下文,然后调用context.SaveChanges()

<强>更新

以下是关于向上下文添加/附加实体的MSDN文章:Entity Framework Add/Attach and Entity States

不幸的是它在C#中(我在VB.NET中找不到翻译或同等文章),但是在你的上下文中添加或附加Employee(或Department)的想法是一样的在SaveChanges()之前。

答案 1 :(得分:0)

我对你的问题有点困惑,但我可能会提供一些有用的提示。首先,正如@Philip Tenn所说,你需要在上下文中添加你创建的内容。它在vb.net中非常简单,只需写下:

Context.Table.Add(Object2Add)。

这会将对象放在该数据表中。现在当你查询时,你应该说:

Dim MyQuery as IEnumerable(of DataTable)=(来自Context.DataTable中的。).ToList。

这将从该数据表中获取所有内容并将其存储在列表中。你的代码可能遇到的一个问题是需要在每个子区域内单独声明上下文(因此Dim Context作为新的TestModelEntity)或全局(因此公共上下文作为新的testModelEntity(这在你的sub之外))。我知道我已经晚了几年但希望这对某人有所帮助!