1

外部キー プロパティを定義せずに (ナビゲーション プロパティが読み込まれる前に)、ナビゲーション プロパティの外部キー値を取得したい。

なんで?

(たとえば)すべての「ステータス」オブジェクトをアプリケーション全体でキャッシュします(はい、これには列挙型を使用できませんでした)。ナビゲーション プロパティを持つオブジェクトをこのステータス クラスにロードすると、リポジトリはプロパティをキャッシュされたアイテムに設定します。

外部キー プロパティを使用することもできますが、EF はキーを知っているので、EF からキーを取得したいと思います (ナビゲーション プロパティの RelationshipManager または DBEntityReference を介して) が、見つからないようです。

:私はEF5を使用しています.Net 4.5で最初にコードを作成します

4

1 に答える 1

0

Slaumaから(stackoverflowで)回答を見つけました(これを重複としてマークする必要があるかどうかわかりませんか?)。複数の関係を持つエンティティを処理するには、コードを少し変更する必要がありました。多くのものはまだ醜いですが、うまくいきます:)

RelationshipManager relMgr = ((IObjectContextAdapter)context).ObjectContext.ObjectStateManager.GetRelationshipManager(document);
IEnumerable<IRelatedEnd> relEnds = relMgr.GetAllRelatedEnds();
IRelatedEnd relEnd = relEnds.Where(r => r.RelationshipName.EndsWith("Document_Status")).Single();
EntityReference<Status> entityRef = relEnd as EntityReference<Status>;
var entityKey = entityRef.EntityKey;

short statusId =(short)entityKey.EntityKeyValues[0].Value;

唯一の欠点は、エンティティをデタッチするか、AsNoTracking() でロードするとすぐに、この情報が失われることです (私が知る限り、誰かがより良い方法を見つけてくれることを願っています)。

于 2012-11-20T11:04:46.770 に答える