2017-09-12 9 views
0

簡単な方法でクライアント側の計算列を取得する方法を見つけようとしています。 そこはすでに介してサーバ上の計算列を持っている可能性がされていますEntity Frameworkコア、クライアント側の計算列

modelBuilder.Entity<Person>() 
.Property(p => p.DeptName) 
.HasClientComputedColumn((context, entity) =>{   
      return myStaticMap[entity.Id];  
     }); 

はEFコアでそれを行うすることが可能です:私が代わりに希望のものを https://docs.microsoft.com/en-us/ef/core/modeling/relational/computed-columns

はこのようなものでしょうか?

+2

クライアント側の場合は、カスタムC#プロパティゲッターを使用してください。 –

+0

@MarcinZablockiさて、私は少し問題を単純化し、解決策の継ぎ目はあなたが言ったように(静的なマップは恐ろしいですが)、私が実際に望んでいたのは、ハードコードされた 'DBSet 'を定義することです。値はデータベースに存在しませんが、EFイベントで照会することができます。これはできますか? –

+0

@MarcinZablockiあなたは質問に答えることができます。私はあなたの答えを受け入れます(おそらく、あなたは '静的依存関係の必要性を取り除くことができますか?)。私は別のデータソースからデータを解決するGraphQLスタイルを探していた –

答えて

2

クライアント側の列のみの場合は、Entity Frameworkから何も使用する必要はありません。私はこのように、あなたの中にPersonクラスをカスタムプロパティのゲッターを実装することをお勧め:

class Person 
{ 
    //other fields... 

    public string DeptName 
    { 
     get 
     { 
      if(myStaticMap==null || !myStaticMap.Contains(this.Id)) 
      { 
       //initialize your static map or throw exception 
      } 
      else 
      { 
       return myStaticMap[this.Id]; 
      } 
     } 
    } 
} 

私はDeptNameプロパティの型がstringであると仮定しましたが、明らかにあなたがあなたのニーズに合うようにそれを変更する必要があります。

関連する問題