2017-03-31 17 views
0

1:1の関係を持つルックアップテーブルの場合、LinqPadはルックアップ値を使用するオブジェクトのコレクションを指すプロパティを生成します。これを無効にするには?Linqpadで生成されたナビゲーションプロパティを無効にするにはどうすればよいですか?

Newtonsoft.JSONを使用してテーブルをシリアル化しようとすると、問題が発生します。

+0

あなたはおそらく 'n:1'関係を意味します。とにかく、Linqpadは単なるデータアクセスツールです。私はその場でLINQ-to-SQLのコンテキストを作成し、それについて設定できるものは何もありません。私は、プロジェクトコードでコンテキストを使用するときには不可能と思っています。 –

+0

'.Select(r => new {r.c1、r.c2、...})'はどうですか? –

答えて

2

あなたはこれらのプロパティを生成するからLINQPadを防ぐことはできませんが、IContractResolverで、それらをシリアル化しないようにNewtonsoftを伝えることができます:

http://james.newtonking.com/archive/2009/10/23/efficient-json-with-json-net-reducing-serialized-json-size

マイ拡張クエリでご契約のリゾルバクラスを書きますすべてのクエリで利用できるようになります。プロパティをフィルタするCreatePropertiesメソッドでは、プロパティの種類に条件を適用してナビゲーションプロパティを除外する必要があります。

JsonConvert.SerializeObject (myObject, FlatResolver.Settings).Dump(); 
あなたは1を除外するために、同様のロジックを使用することができます

:nは、チェックすることにより、単にこれを行う、

public class FlatResolver : DefaultContractResolver 
{ 
    public static JsonSerializerSettings Settings = 
    new JsonSerializerSettings { ContractResolver = new FlatResolver() }; 

    protected override IList<JsonProperty> CreateProperties (Type type, MemberSerialization memberSerialization) 
    { 
    IList<JsonProperty> properties = base.CreateProperties (type, memberSerialization); 

    properties = properties 
     .Where (p => !p.PropertyType.GetCustomAttributes (typeof (System.Data.Linq.Mapping.TableAttribute)).Any()) 
     .ToList(); 

    return properties; 
    } 
} 

そしてシリアル化するために:1と1:1のプロパティ以下は、すべてのnを除外しますエンティティタイプのIEnumerableの場合

関連する問題