【问题标题】:Column Sequence and the Entity Framework列序列和实体框架
【发布时间】:2009-12-28 22:08:56
【问题描述】:

因此,当您将 Entity 对象的集合绑定到网格组件时,网格会按照这些字段在它们来自的 SQL 表中的顺序显示这些字段。这表明字段的序号位置与其对应的实体属性相关联......不知何故。

那么问题来了:如何通过反映实体框架实体的属性来获得表字段序号位置?

让我告诉你我知道的和我尝试过的。显然,EF 实体中的每个数据字段属性都装饰有 System.Runtime.Serialization.DataMemberAttribute。此属性似乎具有 Order 属性。但是,我发现此属性不包含我要查找的内容。实体中所有数据属性的值似乎是 -1。无论顺序是什么,都不是顺序位置。

有人处理过吗?

【问题讨论】:

    标签: c# asp.net-mvc vb.net entity-framework reflection


    【解决方案1】:

    关系数据属性没有顺序也没有序数。表中的列没有顺序,也没有序号(物理实现除外)。结果集列位置对应于特定查询,基于查询的投影列表,并且应用程序始终知道序数,因为它知道它所请求的投影列表。

    如果您想在网格中按特定顺序显示列,请按您想要的顺序显示它们。如果您想在物理存储中检索列序号以用于在开发时未知的临时查询,那么您将使用某些特定于存储的机制直接查询物理存储。例如,如果存储是 SQL Server,您将在 sys.columns 中查找。

    【讨论】:

    • 那(“表中的列没有顺序,也没有序数”)在关系理论中是正确的,对于几乎所有存在的 SQL DB 都是错误的。大多数 SQL 数据库都具有列顺序功能。
    • SQL Server 2012 终于有了一个支持序数的SEQUENCE 列(如果理论上没有的话,在实践中)。
    • 这不是假的,因为您可以根据需要重新排序。
    【解决方案2】:

    我知道你问这个问题已经有一段时间了,但我想我还是会提出这个问题。我最近创建了一个通用类来编辑我的 EF 对象,这样做需要迭代与给定类型关联的属性。我不确定您到底想要完成什么,但这是我所拥有的:

                Dim Id as Integer = 1
                pEditRecord = (From locs In BIPContext.AspNetUsers Where locs.Id = Id Select locs).FirstOrDefault()
    
                Dim iProps = pEditRecord.GetType().GetProperties()
                For z As Integer = 0 To iProps.Count - 1
                    Dim iColName = iProps(z).Name
                    Dim iVal = iProps(z).GetValue(pEditRecord)
                Next
    

    【讨论】:

    • 是的。正确的。现在回来 - 他要求表序数,而不是属性序数。
    【解决方案3】:

    如何通过反映实体框架来获得表字段序号位置 实体的属性?

    我如何通过查看食物来获得某些食物的厨师的名字?

    你不能。

    您可以询问 EF 元数据 - 而不是类 - 但这没有任何意义,因为元数据可以具有与数据库中的字段不同的顺序。

    如果您想要数据库中的字段,请获取表名,然后查询 INFORMATION_SCHEMA 并从那里获取字段序号(确保它们在那里),但是您对实体框架所做的任何事情都可能具有与存储完全不同的顺序在数据库中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-08
      • 2013-12-26
      • 1970-01-01
      • 2011-05-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多