2010-11-30 13 views
12

私たちは、アプリケーションのEntity Frameworkモデルに基づいてWCF Data Serviceを使用しています。Entity FrameworkのHierarchyIDが機能しない

これでは、HierarchyIdの列のテーブルを追加する必要があります。そのテーブルをEDMXファイルに追加すると、HierarchId列がクラスファイルに表示されません。

HierarchyIDを使用するにはどうすればよいですか?私はエンティティフレームワークがHierarchyIDをサポートしていないことを読んで、どうすればこれを達成できますか?

+2

あなた問題はWFではなくEFである。問題は、EFがhierarchyid列を表すことができないことです。 – Gabe

+0

私はHierarchyID文字列で作業するのを少し楽にするためにこの小さなコードを使用しました... http://stackoverflow.com/questions/3347860/is-there-a-practical-way-to-use-the-hierarchyid- datatype-in​​-entity-framework-4 – EBarr

+0

@EBarr、あなたの実装は良く見えますが、私の要件はそのまま既存のHierarchyIDをそのまま使用していました。私がしたのは、EFがサポートしていないので計算カラムを使用したことだけでした。計算された列の使用によって、その仕事を偉大な行います。 – Mohanavel

答えて

24

いつでもHierarchyIdをその文字列表現(/1/3/4/1など)に変換し、その文字列をWCFデータサービスに送信できます。

更新:あなたはこの計算を追加する場合、新しいカラムは間違いなくあなたのEFモデルに表示されるはずです、あなたはWCFとWCFデータの上にそれを送り返すためにこれを使用することができるはずということは、SQL Serverのテーブルにカラムを持続サービス:

ALTER TABLE dbo.YourTable 
ADD HierarchyString AS (your hierarchyID field).ToString() PERSISTED 

更新#2:read the docs/1/3/4/1のような文字列をHierarchyIdタイプに解析することができます。HierarchyId::Parse(string)または通常のCAST(string as HierarchyId)メソッドを使用して解析することができます。

+0

EDMXファイルにテーブルを追加している間に私が早期に述べたように、hierarchyIdフィールドは表示されません。だから私はsvcファイルのメソッドを持っていると "挿入する..."クエリを使用して挿入する必要がありますか? – Mohanavel

+1

OK、これはゲッターとして使うことができますが、セッターはどうですか?私はセッターのようなものを試しました。 setterが可能な場合、すべてを簡単な方法で行うことができます。これを使って私はデータを取得することができます。 marc_sに感謝します。 – Mohanavel

+0

@Mohanavel:私の答えをもう一度更新..... –

10

あなたは計算列を使用する場合は、単にあなたも、このようにあなたの財産上のDatabaseGeneratedデータ注釈が必要になりますことに注意してください:

[DatabaseGenerated(DatabaseGeneratedOption.Computed)] 
public string HierarchyString { get; set; } 

は、詳細はこちらの記事をチェックアウト: Entity Framework Code First Computed Properties