5

以下の関数では、context.SaveChanges()の後、エンティティPropertyTypeは常にnullです。ObjectContextの使用からDBContextへの変換(最初にデータベースを使用)しましたが、変更前は正常に機能していましたが、現在は機能していません。足りないものはありますか?

PropertyTypeIDを確認すると、正しく書き込まれ、データベースに存在します。すべての関係は、dbおよびedmxファイルで正しく設定されています。生成された.ttファイルは、PropertyTypeオブジェクトを仮想として表示します。これはEF5です。

コードは次のとおりです(エンティティプロパティの重要でない割り当ては削除されています)。

    private ListingTransferDetail BeginListingTransferDetailReport(int PropertyTypeID)
    {
        ListingTransferDetail transfer_detail = new ListingTransferDetail();
        transfer_detail.PropertyTypeID = PropertyTypeID;

        using (IDXEntities context = new IDXEntities())
        {
            context.ListingTransferDetails.Add(transfer_detail);
            context.SaveChanges();
            TransferProgress += "<br /><br /><strong>" + DateTime.Now + "</strong>: Transfer initialized for property type \"" + transfer_detail.PropertyType.DisplayName + "\".";
        }

        return transfer_detail;
    }

前もって感謝します。

編集

SaveChanges()の後にこのコード行を追加すると、機能することがわかりました。ただし、これは理想的ではありません。デフォルトでエンティティをロードするにはどうすればよいですか?

context.Entry(transfer_detail).Reference(a => a.PropertyType).Load();

再度、感謝します。

4

1 に答える 1

12

new遅延読み込みを有効にするには、を使用する代わりにプロキシを作成する必要があります。

private ListingTransferDetail BeginListingTransferDetailReport(int PropertyTypeID)
{
    using (IDXEntities context = new IDXEntities())
    {
        ListingTransferDetail transfer_detail =
            context.ListingTransferDetails.Create();
        transfer_detail.PropertyTypeID = PropertyTypeID;

        context.ListingTransferDetails.Add(transfer_detail);
        context.SaveChanges();

        //...

        // the following triggers lazy loading of PropertyType now
        var something = transfer_detail.PropertyType.SomeProperty;
    }

    return transfer_detail;
}
于 2012-12-04T21:40:57.317 に答える