2

我有一个运行的存储过程并将结果集返回到模型中(使用 EF 5)。

当我遍历结果集时,我只想获取模型中用于保存数据的列的名称。

我怎样才能做到这一点?

会不会像下面这样:

var myCustomers = DbContext.Database.SqlQuery<Customer>
                                      ("exec SelectCustomers").ToList();

                    foreach (Customer cust in myCustomers)
                    {

                    }

在运行时显示值“ myCustomers[0].Address1 ”将显示该字段内的实际值但我怎样才能简单地提取列名

如果我尝试以下类似的操作,索引值始终为-1,我不知道我错过了什么。我已经用了几十次了。

int Idx = myCustomers[0].Address1.IndexOf(".").ToString();
"-1"
4

1 回答 1

1

我认为你不能可靠地做到这一点。EF 由 3 层组成 - 对象层(也称为 O-Space - 您的类型)、概念层(也称为 C-Space - EDM 术语中的模型)和存储层(也称为描述数据库的 S-Space)。O-Space 和 S-Space 之间的映射或多或少是 1:1 - 因此类上的属性映射到 OSpace 模型中的实体属性。然而,有一些将 C-Space 映射到 S-Space 的策略,例如按层次结构表 (TPH)、按类型表 (TPT)、按具体类型表 (TPC) 和实体拆分(您可以在此处找到更多详细信息:http: //blogs.msdn.com/b/adonet/archive/2010/10/25/inheritance-mapping-a-walkthrough-guide-for-beginners.aspx)。也可以将您自己的名称用于与数据库中相应列的名称不同的属性。在最简单的情况下,属性名称将匹配列名称,但通常情况并非如此。在运行时,有关映射的信息是存储类型,这些类型大多是内部的,您无法访问它们。有关映射的信息是从描述 C 空间和 S 空间之间的映射的 Msl 工件中填充的。您可以尝试解析这个工件(它是一个 Xml 文件),但如果您需要支持所有不同的映射策略,这并不是一件容易的事。

于 2012-10-24T03:38:05.737 回答