2011-03-06 7 views
8

メソッドとプロパティを使用して部分クラスのEFエンティティを拡張したいとします。私はこれをかなり頻繁にやった。 しかし、私はこのエンティティからのデータを他のエンティティからのデータと組み合わせる必要があります。したがって、これらのクエリを作成するためにentitycontext(添付されている場合)にアクセスできる必要があります。 エンティティオブジェクトコンテキストをそこから取得する方法はありますか?Entity Framework 4:部分的なエンティティクラスの現在のデータコンテキストにアクセス

Thanx!

+0

この音権利をdosent、あなたが説明することができますd? mayby therは、あなたが行く必要がある場所(おそらく、団体や複合タイプ)を得る別の方法です – Menahem

答えて

2

エンティティから最新のObjectContextを取得する方法はありません。 EntityObjectクラスとPOCOプロキシに基づくエンティティは内部でObjecContextを使用しますが、公開しません。

あなたのエンティティにそのような陳腐化を追加することは悪いデザインとみなされるので、あなたがしようとしていることを説明し、他の(より良い)解決策を見つけることができます。

+0

こんにちは。私たちのエンティティは "List "というプロパティを持ちます。これらのプロパティは、データベース内のメタ構造(いくつかのテーブル)で定義されています。エンティティのこのプロパティにアクセスする場合は、データベースから構造体と値を収集する必要があります。私たちの設計では、エンティティを「動的」プロパティで拡張することができます。 – SolarX

+0

しかし、私はこれをビジネスレイヤーに移すかもしれませんが、パーシスタンスレイヤーにある低レベルの抽象化であると考えています。 – SolarX

2
それが推奨されていないにもかかわらず

、及び(ラディスラフが述べたように:悪いデザイン)私は自分自身がそれを使用していないが:

http://blogs.msdn.com/b/alexj/archive/2009/06/08/tip-24-how-to-get-the-objectcontext-from-an-entity.aspx

拡張メソッド:

public static ObjectContext GetContext( 
    this IEntityWithRelationships entity 
) 
{ 
    if (entity == null) 
     throw new ArgumentNullException("entity"); 

    var relationshipManager = entity.RelationshipManager; 

    var relatedEnd = relationshipManager.GetAllRelatedEnds() 
             .FirstOrDefault(); 

    if (relatedEnd == null) 
     throw new Exception("No relationships found"); 

    var query = relatedEnd.CreateSourceQuery() as ObjectQuery; 

    if (query == null) 
     throw new Exception("The Entity is Detached"); 

    return query.Context; 
}
、私は解決策につまずいこれが必要とされる理由エンティティ内

var myContext = this.GetContext() as MyEntities;
+0

コード例を直接記述してください参照されたソースが消えてしまった場合に備えて、答えに入れる。 – Tracker1

+0

記事の状態の著者として、エンティティに関係がない場合、これは機能しません。代わりに、これは[反映](http://stackoverflow.com/a/26212071/111794)で行うことができます。 –

関連する問題