2

BookLibrary私は3つのテーブルAuthorを持つ名前のデータベースを持っていPayrollますArticle. データベースに接続するためにEntityフレームワークを使用しています。そのインスタンスを作成しました。

BookLibrary bookLibraryContext = new BookLibrary();

これをデータセットにキャストしたいと思います(データセットを引数として渡すため)。どうやってするの?

また、T4テンプレートを使用して、すべての列名を読み取り専用の文字列プロパティとして生成したいと考えています。これを行うには、データベース内のすべてのテーブルと列名をループする必要があります (エンティティ オブジェクトを介してこれを実行したいと考えていますbookLibraryContext)。しかし、エンティティ オブジェクトのすべてのテーブルと列をループする方法がわかりません。Googleで検索しましたが、多くの人がリフレクションをループに使用するか、SQLを直接使用することを提案しました。私は C# でそれをやりたいのですが、Reflection にはあまり詳しくありません。

4

1 に答える 1

2

これをデータセットにキャストしたいと思います(データセットを引数として渡すため)。どうやってするの?

手動で。EF とデータセットは完全に異なるテクノロジであり、どちらも別のテクノロジへの変換をサポートしていません。そのため、使用するデータセットとすべてのデータ テーブルを手動で作成し、コンテキストから手動で入力する必要があります。

データセットを操作する場合は、Entity フレームワークを使用しないでください。データセットを直接使用します。

しかし、エンティティ オブジェクトのすべてのテーブルと列をループする方法がわかりません。

Entity オブジェクトにはこの情報がありません。この情報は、 から入手できる EF マッピングの奥深くに隠されていますbookLibraryContext.MetadataWorkspace。この情報を取得するためにリフレクションは必要ありません。EDM と、EDM が情報を保存する方法を理解する必要があるだけです。

次のようなことを試してください:

foreach (var entityType in context.MetadataWorkspace
                                  .GetItems<EntityType>(DataSpace.SSpace))
{
     string tableName = entityType.MetadataProperties
                                  .Single(m => m.Name == "Name")
                                  .Value
                                  .ToString();

     var members = (ReadOnlyMetadataCollection<EdmMember>)entityType
                                              .MetadataProperties
                                              .Single(m => m.Name == "Members")
                                              .Value;

     foreach (var columnName in members.Select(m => m.Name))
     {

     }
}
于 2012-04-11T20:06:55.290 に答える