2011-01-23 8 views
2

私はEFv4 POCOエンティティテンプレートに基づいてリポジトリを実装しました。Entity Framework v4 POCOテンプレート:リポジトリは不正なタイプのオブジェクトを返します

私はこれを行うと

public Client Load(Guid firmId, 
        int prettyId) 
{ 
    var client = (from c in _ctx.Clients where c.firm_id == firmId && c.PrettyId == prettyId select c).FirstOrDefault(); 
    return client; 
} 

クライアントは返されたが、ここで何が起こっているタイプ

{System.Data.Entity.DynamicProxies.Client_8E92CA62619EB03F03DF1A1FC60C5B21F87ECC5D85B65759DB3A3949B8A606D3} 

のでしょうか?私は、System.Data.Entity名前空間から型への参照を取り除くと思った。返されるインスタンスはClient型でなければなりません。これは単純なPOCOクラスです。

+0

どうやらそれは財産ContextOptions.ProxyCreationEnabledに関係していると我々は(デフォルトはtrue)falseに設定した場合、それはプロキシオブジェクトを作成しませんそれらタイプはDynamicProxiesです)。しかし、我々はまた、遅延ロードの能力を失う。誰かがこのトピックに関するより多くの洞察を持っているなら、返答してください。 – mare

+0

変更トラッキングの機能は、動的プロキシによってサポートされています。 – Slauma

+0

**プロキシオブジェクトを無効にすると、遅延ロードを失うことは確実ですか?私は前にこの問題について聞いたことがありません...(私は怠惰な読み込みを無効にし、熱心な負荷を私が望むものを無効にします) – RPM1984

答えて

2

は、私は解決策は、動的プロキシ型指定されたオブジェクトの作成を無効にし、我々は最初の場所でEF POCOテンプレートとした後、何であったかで簡単なPOCOS、で私たちを残し

context.ProxyCreationEnabled = false; 

を設定することであることを確認することができます。

しかし、ナビゲーションプロパティの読み込みが遅れたり、エンティティのトラッキングが変更されたりします。最初の場合は、ObjectQueryオブジェクトに対してcontext.LoadProperty()メソッドまたはInclude()メソッドを使用する必要があります。 2つ目は、まだ解決策がわかりません(実際はPOCOの変更追跡を行うのは実際には意味がありません)。また、ここで

は私はマーレの答えが正しいことを同意 What are the downsides to turning off ProxyCreationEnabled for CTP5 of EF code first

+1

プロキシなしでPOCOに「スナップショットベースの」変更追跡がありますが、オーバーヘッドがあり、プロキシよりも遅いです。この記事をご覧ください:http://blogs.msdn.com/b/adonet/archive/2009/06/10/poco-in-the-entity-framework-part-3-change-tracking-with-poco .aspx – Slauma

+0

プロキシテンプレートはどこで確認できますか? – Shimmy

0

を指摘したいと類似質問です。しかし、私は注意のメモを追加します。 このProxyCreationEnabled設定がtrueに設定されていないクエリを実行すると、EFはDynamicProxiesを返します。後で設定をfalseに設定してクエリを実行すると、EFはProxyCreationEnabled設定に関係なく、キャッシュされたDynamicProxiesオブジェクトを返します。

0

これは

if (!loader.IsLazyLoadingEnabled(container)) 

下* Model.edmxで* Model.Context.ttファイル内のEFのコンテキストにグローバルに設定することができます...

this.Configuration.LazyLoadingEnabled = false; 
    this.Configuration.ProxyCreationEnabled = false; 

これらが追加されます* Model.context.csファイルが生成され、データベースからの更新の間に保持されます。

データベースからロードされた親に一致する子オブジェクトを必要としないので、私はこの設定を推奨します。

ALT:それはJSONのserizializationのために設定することができます( JSON.NET Error Self referencing loop detected for type

関連する問題