Vb.net 无法使用实体框架保存记录

Vb.net 无法使用实体框架保存记录,vb.net,winforms,frameworks,entity,Vb.net,Winforms,Frameworks,Entity,有人能帮忙吗 我是个十足的初学者。但是我搜索了一下网。VB中的任何地方都没有显示很多示例 我已经创建了一个包含win表单的测试项目。然后添加了另一个包含实体模型的项目,在构建模型之后,我将其引用添加到Win form项目中。之后,我添加了模型对象作为数据源 我将datasource控件拖到表单中,并添加了以下代码 Private context As TestModelEntities Private Sub Form1_Load(sender As Object, e As EventArg

有人能帮忙吗

我是个十足的初学者。但是我搜索了一下网。VB中的任何地方都没有显示很多示例

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

我将datasource控件拖到表单中,并添加了以下代码

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

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

在您的
部门绑定导航器SaveItem\u单击
方法时,在调用
上下文。SaveChanges()
之前,您似乎没有向
上下文添加任何内容

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

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

更新

下面是一篇MSDN文章,介绍如何在上下文中添加/附加实体:


不幸的是,它在C#中(我在VB.NET中找不到翻译或等效的文章),但在
SaveChanges()
之前将
员工
(或
部门
)添加或附加到您的上下文中的想法是一样的,我对您的问题有点困惑,但我可能有一些提示可以帮助。首先,正如@Philip Tenn所说的,您需要将您创建的内容添加到上下文中。在vb.net中非常简单,只需编写:

Context.Table.Add(Object2Add)

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

Dim MyQuery作为IEnumerable(属于DataTable)=(来自Context.DataTable中的)。ToList


这将从该数据表中获取所有内容并将其存储在列表中。代码中可能存在的一个问题是,上下文需要在每个子系统中分别声明(像新TestModelEntity这样暗淡的上下文)或全局声明(像新TestModelEntity这样公共上下文(这在子系统之外))。我知道我晚了几年,但希望这能帮助一些人

谢谢Philip,我的理解是使用实体框架的好处之一。它将文本框映射到数据库字段。我可能错了。但我遵循了MSDN示例。@Anup我没有将EF用于Windows窗体(我已将其用于ASP.NET Web窗体和ASP.NET MVC)。在一天结束时,即使您找到了将文本框绑定到实体字段的方法,您仍然需要在调用SaveChanges之前将其添加到上下文中,否则就没有要保存的更改。我会从一个简单的例子开始,新建一个Employee(或您正在使用的任何实体对象),将其添加到上下文中,然后调用SaveChanges并验证它的持久性,context.table.field=autogeneratedtextboxs.text用于每个字段?@Anup我认为您对WinForms的关注太多,试图使用数据绑定到实体(我还没有这样做)。我建议您只需创建一个简单的ASP.NET网页,其中包含一个按钮,该按钮除了构造和保存(使用硬编码值)实体外,什么都不做。从那以后,你可以让它变得动态,转到WinForms等等。有人能帮你吗。