【问题标题】:Looping through tables in Entity Framework 6遍历实体框架 6 中的表
【发布时间】:2016-03-24 13:59:55
【问题描述】:

抱歉这个简单的问题。我是新来的。我有一个包含多个表的实体模型,我想获取表的列表,然后我想从表中获取列的内容。

例如,我有科目表:生物、化学和物理,每个科目都有一个列 className(以及其他列)。我想遍历表格,获取名称然后获取该列下的内容,因为我需要 ToList() 它。

我想做这样的事情:

for each (table in myEntityModel)
{
  Get tableName from table 
  Get contents under className from table 
}

我尝试过使用元数据工作区,并获得了一个 tableName 列表,但这对我获取每个表的内容并没有太大帮助。我可以查询单个表,但我不知道如何更改表。如果我使用:from r in myEntity.Biology select{...},我无法更改我所指的实体集。

哦,而且,如果我正在做的事情有帮助,我正在尝试在 Visual Studios 2015 中的 Ajax Control Toolkit 16.1 的帮助下构建一个手风琴。我正在使用 Entity Framework 6.0。主题名称将是 headercontainer,类列表将作为网格视图添加到手风琴窗格中。我是 C#、Visual Studios、数据库、查询、实体模型以及我正在使用的几乎所有东西的新手,但可以随意使用尽可能多的行话。如果有什么让我感到困惑,我会用谷歌搜索它。谢谢!

【问题讨论】:

  • 您不应该从每个主题都有一个表格。有没有机会改进数据库设计?

标签: c# entity-framework visual-studio-2015 entity-framework-6 ajaxcontroltoolkit


【解决方案1】:

效率不高,因为它将整个表加载到内存中,但你可以这样做:

 var myEntityModel = new MyEntityModel(); //your context

 var dbSets = myEntityModel.GetType().GetProperties().Where(p => p.PropertyType.Name.StartsWith("DbSet")); //get Dbset<T>

 foreach (var dbSetProps in dbSets)
 {
     var dbSet = dbSetProps.GetValue(myEntityModel, null);
     var dbSetType = dbSet.GetType().GetGenericArguments().First();

     var classNameProp = dbSetType.GetProperty("className");// i did not undestand, you want classes with className property?

     if (classNameProp != null)
     {
         var contents = ((IEnumerable) dbSet).Cast<object>().ToArray();//Get The Contents of table
     }

【讨论】:

  • 我想循环浏览每个表的每个字段 - 这帮助我到达了那里。谢谢。
  • classNameProp 部分没用,dbSetType 已经允许访问每个表。对我来说,循环每个 DbSet 以加载每个表的第一行以确保模型完整性很有用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-21
相关资源
最近更新 更多