我有一个运行的存储过程,并将结果集返回到模型中(使用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"
答案 0 :(得分:1)
我认为你不能可靠地做到这一点。 EF由3层组成 - 对象层(也称为O-Space - 您的类型),概念层(也称为C-Space - EDM术语中的模型)和存储层(也称为描述数据库的S-Space)。 O-Space和S-Space之间的映射或多或少是1:1 - 因此类上的属性映射到OSpace模型中的实体属性。但是,有一些将C-Space映射到S-Space的策略,如每个层次表(TPH),每类型表(TPT),每个混凝土类型表(TPC)和实体拆分(您可以在此处找到更多详细信息:{{ 3}})。也可以将自己的名称用于与数据库中相应列的名称不同的属性。在最简单的情况下,属性名称将匹配列名称,但通常情况并非如此。在运行时,有关映射的信息是存储的类型,大多数是内部的,您无法访问它们。关于映射的信息从Msl工件填充,其描述了C空间和S空间之间的映射。您可以尝试解析此工件(它是一个Xml文件)但如果您需要支持所有不同的映射策略,这不是一件容易的事。