0

私は、データが edmx エンティティからアクセスされる 1 つのアプリケーションを開発しています。そこから、次のような edmx エンティティからデータを取得した後、各ビジネス エンティティを埋める必要があります。

var tblproducts = tblproductsData
            .Select(t => new tblProduct()
                {
                    CategoryID = t.CategoryID,
                    Description = t.Description,
                    ID = t.ID,
                    Image = t.Image,
                    InsDt = t.InsDt,
                    Price = t.Price,
                    Quantity = t.Quantity,
                    Status = t.Status,
                    Title = t.Title,
                    tblCategory = new EFDbFirst.Models.tblCategory()
                        {
                            ID = t.tblCategory.ID,
                            status = t.tblStatus.StatusID,
                            Title_Category = t.tblCategory.Title_Category
                        },
                    tblStatu = new EFDbFirst.Models.tblStatu()
                        {
                            StatusDescription = t.tblStatus.StatusDescription
                            ,
                            StatusID = t.tblStatus.StatusID
                        }
                });

データを取得してdbにデータを設定するたびに、ある匿名型を取り、それを別の匿名型に変換する一般的な方法を作成する良い方法があるので、私はこれでフェードアップしています。

前もって感謝します

4

1 に答える 1

0

あなたの例はそれほど明確ではありません。

まず、EF は内部の匿名型では機能しません。最初に edmx ファイルまたはコードを使用して定義した EF 型で機能します。ただし、Select ステートメントを定義することで、匿名型を自分で作成できます。

例えば:

var products = context.tblProductsData
               .Select(r => new { Description = r.Description }); //new without typename is an 
                                                                  //anonymous object

tblProduct、tblCategory、および tblStatu オブジェクトは EF 型ですか? その場合、Select を記述する必要はありません。実行時に EF によってオブジェクトが生成されます。

例えば:

var products = context.tblProductsData.ToList();

これにより、tblProduct オブジェクトが自動的に生成されます。tblProduct.tblCategory または tblProduct.tblStatu に移動しようとすると、遅延読み込みによってそれらが取得されます。最初のクエリ (eager-loading) 中にそれらを明示的にロードする場合は、Include関数を使用します。

例えば:

var products = context.tblProductsData.Include(r => r.tblCategory)
                                      .Include(r => r.tblStatu).ToList();

ただし、tblProducts、tblCategory、および tblStatu がビジネス オブジェクトであり、EF 型ではない場合、これを行う方法は他にありません。Select ステートメントで明示的に作成する必要があります。

于 2013-04-01T13:08:35.157 に答える