- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我认为这个问题已经被问过,我只是似乎找不到我理解的答案。我有一个与 Entity Framework 配合使用的程序 - 代码优先。
当程序运行并且数据库尚未创建时,它将创建数据库并向其中添加一些数据。它添加的数据有3个类别,每个客户在创建客户对象时都会分配一个类别。这 3 个类别也数据绑定(bind)到组合框,创建客户时,从组合框中选择类别
问题:当创建客户时,似乎也创建了类别的副本,类别副本被添加到类别表中(不应该发生在我的脑海中),当然这个副本也是添加到组合框。
我无法理解为什么会发生这种情况以及我做错了什么。我也不确定应该在此处发布代码的哪些部分或应该在哪里查找错误,尽管我感觉这种情况是由糟糕的数据库设计/类设计造成的。这是我第一次使用 Entity Framework
数据绑定(bind)代码
Dim DisplayLimos As New BindingSource
context.LimosDb.Load()
DisplayLimos.DataSource = context.LimosDb.Local.ToBindingList()
CbLimos.DataSource = DisplayLimos
CbLimos.DisplayMember = "Info"
Dim DisplayCategories As New BindingSource
context.CategoriesDb.Load()
DisplayCategories.DataSource = context.CategoriesDb.Local.ToBindingList()
CbCategorie.DataSource = DisplayCategories
CbCategorie.DisplayMember = "Naam"
Dim DisplayKlanten As New BindingSource
context.KlantenDb.Load()
DisplayKlanten.DataSource = context.KlantenDb.Local.ToBindingList()
ListBoxKlanten.DataSource = DisplayKlanten
ListBoxKlanten.DisplayMember = "Naam"
Dim displayArrangementen As New BindingSource
context.ArrangementenDb.Load()
displayArrangementen.DataSource = context.ArrangementenDb.Local.ToBindingList()
CbArrangementen.DataSource = displayArrangementen
CbArrangementen.DisplayMember = "Naam"
用于填充类别表的代码第二个参数是一个包含每个类别折扣的类
Dim categorieVip As New KlantenCategorie("Vip", kortingVip)
Dim categorieWedding As New KlantenCategorie("Wedding", kortingWeddingPlanner)
Dim categorieNightLife As New KlantenCategorie("NightLife", kortingConcertenPlanner)
context.CategoriesDb.Add(categorieVip)
context.CategoriesDb.Add(categorieWedding)
context.CategoriesDb.Add(categorieNightLife)
context.SaveChanges()
将客户添加到数据库的代码以及在发生错误时还创建了类别副本的代码
Private Sub BtnKlant_Click(sender As Object, e As EventArgs) Handles BtnKlant.Click
Dim adres As New Adres(TxbStraat.Text, TxbHuisN.Text, CType(TxbPostCode.Text, Integer), TxbGemeente.Text)
Dim klant As New Klant(CType(TxbKlantNr.Text, Integer), TxbVoorNaam.Text, TxbNaam.Text, adres, CType(TxbBtwNr.Text, Integer), CType(CbCategorie.SelectedValue, KlantenCategorie))
Try
_Context.KlantenDb.Add(klant)
_Context.SaveChanges()
ListBoxKlanten.Refresh()
MessageBox.Show("Klant succesvol toegevoegt")
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
最佳答案
我相信我已经找到了我的错误所在。
在我创建新客户并传递其应有的类别的部分
Private Sub BtnKlant_Click(sender As Object, e As EventArgs) Handles BtnKlant.Click
Dim adres As New Adres(TxbStraat.Text, TxbHuisN.Text, CType(TxbPostCode.Text, Integer), TxbGemeente.Text)
Dim klant As New Klant(CType(TxbKlantNr.Text, Integer), TxbVoorNaam.Text, TxbNaam.Text, adres, CType(TxbBtwNr.Text, Integer), CType(CbCategorie.SelectedValue, KlantenCategorie))
Try
_Context.KlantenDb.Add(klant)
_Context.SaveChanges()
ListBoxKlanten.Refresh()
MessageBox.Show("Klant succesvol toegevoegt")
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
我改变了这个
Dim klant As New Klant(CType(TxbKlantNr.Text, Integer), TxbVoorNaam.Text, TxbNaam.Text, adres, CType(TxbBtwNr.Text, Integer), CType(CbCategorie.SelectedValue, KlantenCategorie))
到此
Dim klant As New Klant(CType(TxbKlantNr.Text, Integer), TxbVoorNaam.Text, TxbNaam.Text, adres, CType(TxbBtwNr.Text, Integer), _Context.CategoriesDb.First(Function(ct) ct.Naam = CbCategorie.Text))
使用 lambda 从数据库中提取正确的类别并将其链接到创建的新客户。 (至少我是这么理解的)
此链接是我创建此项目的主要内容,是我在 Code First EF 上找到的少数几个带有实际 VB 示例的链接之一。 http://visualstudiomagazine.com/articles/2012/03/07/an-ef-code-first-tutorial.aspx
如果有人想对我的工作或编码方式提出批评,请这样做!我始终愿意提高我的菜鸟技能:)
关于mysql - Entity Framework 添加不应通过其他对象添加的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24104765/
我是一名优秀的程序员,十分优秀!