1

有人可以帮忙吗?

我是一个绝对的初学者。但是我在网上搜了一下。在 VB 中显示的例子并不多。

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

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

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

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

4

2 回答 2

0

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

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

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

更新

这是一篇关于向上下文添加/附加实体的 MSDN 文章:实体框架添加/附加和实体状态

不幸的是,它在 C# 中(我在 VB.NET 中找不到翻译或等效文章),EmployeeDepartmentSaveChanges().

于 2013-04-02T00:25:20.970 回答
0

我对你的问题有点困惑,但我可能有一些可以提供帮助的提示。首先,正如@Philip Tenn 所说,您需要将您创建的任何内容添加到上下文中。在 vb.net 中真的很简单,只需编写:

Context.Table.Add(Object2Add)。

这会将对象放入该数据表中。现在,当您查询时,您应该说以下内容:

将 MyQuery 调暗为 IEnumerable(of DataTable) = (From a in Context.DataTable).ToList。

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

于 2016-08-18T14:27:22.573 回答