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 は、オブジェクト レイヤー (O-Space とも呼ばれます - ユーザーのタイプ)、概念レイヤー (C-Space とも呼ばれます - EDM 用語のモデル)、およびストア レイヤー (データベースを記述する S-Space とも呼ばれます) の 3 つのレイヤーで構成されます。O-Space と S-Space の間のマッピングは、多かれ少なかれ 1:1 です。したがって、クラスのプロパティは、OSpace モデルのエンティティ プロパティにマップされます。ただし、階層ごとのテーブル (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 に答える