【问题标题】:How to use a table name as a variable with entity?如何使用表名作为实体变量?
【发布时间】:2019-04-17 20:04:25
【问题描述】:

在 VB .net 中,我使用的是实体框架,我有一个表单 (frmAdd),其中包含一个 DataGridView,它的数据源是:

DataGridView1.DataSource = myEntity.Genders.ToList

我想让 (Genders) 变成这样的变量:

DataGridView1.DataSource = myEntity.tblName.ToList

这是我的代码:

Public Class frmAdd

Dim myEntity As New HRDataEntities

Dim tblName As String

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

    DataGridView1.DataSource = myEntity.Genders.ToList

End Sub

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

       tblName = "Jobs"

编辑器不接受下一行:

       DataGridView1.DataSource = myEntity.tblName.ToList

       DataGridView1.Refresh()

    End Sub

 End Class

【问题讨论】:

  • 错误信息是什么?你能把它添加到问题中吗?
  • @Renan ,, 没有错误信息。但 vb 编辑器不接受这一点,并说“tblName 不是 'HRDataEntities' 的成员。”
  • 您是否尝试仅使用 DataGridView1.DataSource = myEntity.tblName 删除 .ToList
  • @Renan .. 是的,我做到了,但没办法..
  • 您能在问题中添加您的 HRDataEntities 类吗?我认为,如果您的 HRDataEntities 继承自名为 DbContext 的实体框架类并且 tblName 是声明为 DbSet 属性的 HRDataEntities 属性,那么它将起作用

标签: vb.net entity-framework-6


【解决方案1】:

您可以使用DbContext.Set Method 动态获取DbSet。但是,您必须使用 Type 来调用它,而不是传递一个名称。

Dim entityType As Type

entityType = GetType(Jobs)
DataGridView1.DataSource = context.[Set](entityType).Cast(Of Object)().ToList()

【讨论】:

  • 编辑器不接受 (.ToList) ,因此我将其删除,但引发错误 (System.NotSupportedException: '数据直接绑定到存储查询 (DbSet, DbQuery, DbSqlQuery, DbRawSqlQuery) 不受支持. 而是用数据填充 DbSet,例如通过在 DbSet 上调用 Load,然后绑定到本地数据。对于 WPF 绑定到 DbSet.Local。对于 WinForms 绑定到 DbSet.Local.ToBindingList()。对于 ASP.NET WebForms可以绑定到在查询上调用 ToList() 的结果或使用模型绑定,更多信息请参阅go.microsoft.com/fwlink/?LinkId=389592.')
  • 您可能在代码顶部缺少Imports System.Linq
  • 不,我不会错过的。但我想清楚的是,在我编辑代码时,(ToList)不是一个选项出现在下拉列表中。但我可以选择例如(ToString),这会显示一个空白的datagridview。
  • 好的,我明白了。问题是在这种动态情况下,返回的 DbSet 没有输入,即它实现了IEnumerable,但没有实现IEnumerable(Of T)。因此,由于您在编译时不知道真实类型,因此必须将其强制转换为 Object
  • 您能帮我解释一下吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-05
  • 2016-06-04
  • 1970-01-01
  • 2014-01-01
  • 2010-12-05
  • 1970-01-01
相关资源
最近更新 更多