1

POCO を使用する Entity Framework でいくつかの問題が発生しています。私が見ている動作が予想されるものなのか、それともなぜそれが起こっているのかを深く掘り下げる必要があるのか​​どうか、誰かが大まかなレベルで教えてくれることを願っています.

クラスCustomerと別のCustomerTypeがあるのでCustomerType(タイプCustomerTypeを示すタイプの)CustomerTypeプロパティCustomersがあり、s のコレクションであるプロパティがありますCustomer(そのタイプを持つすべてCustomerの s) したがって、これらは基本的に関連付けの両端のナビゲーション プロパティであり、結果として次のようなPOCOコードで:

public partial class Customer
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int TypeId { get; set; }
    public CustomerType Type { get; set; }
}

public partial class CustomerType
{
    public CustomerType()
    {
        this.Customers = new HashSet<CustomerType>();
    }

    public int Id { get; set; }
    public string TypeName { get; set; }

    public virtual ICollection<Customer> Customers { get; set; }
}

DbContext.Configuration.ProxyCreationEnabled=falseProxy の作成と LazyLoading (つまりとの両方) をオフにしましDbContext.Configuration.LazyLoadingEnabled=falseた。

Customerセットからインスタンスを取得すると、予想どおり、Typeそれらのプロパティはデフォルトで null です。

Customerしかし、セットからインスタンスを取得すると.Include("Type")、プロパティがロードされるだけでなくType、子もロードされます。つまり、Customerこれらのそれぞれの のコレクションです。

これは期待されていますか?

4

1 に答える 1

2

半期待です。インクルード拡張機能は、実行される SQL に影響します。ロードされた CustomerTypes (Customer クエリに含まれているため) は、CustomerType.ParentId 列に従ってオブジェクト ツリーに組み込まれます。

そのため、たまたま親と子の両方が同じクエリにロードされた場合、子は親に詰め込まれます。

于 2013-05-14T05:17:32.680 に答える