WCF:どのプロパティタイプに対してSetLinkを呼び出す必要がありますか

scher

オブジェクトをWCFサービスに保存するための本当に汎用的なクラスを作成したいと思います。あらゆるタイプのオブジェクトを取得し、リフレクションを介してオブジェクトのプロパティを分析します。オブジェクトをサービスコンテキストに保存するとき、プロパティののSetLink(...)メソッドを呼び出す必要があるかどうかを知る必要がありDataServiceContextます。

したがって、呼び出す必要があるかどうかを確認するためのメソッドが必要SetLink(...)です。私はすでに自分でやろうとしました:

private bool IsLinkedProperty(PropertyInfo propertyInfo)
{
    return (propertyInfo != null) && propertyInfo.PropertyType.IsClass;
}

ただし、この関数は文字列プロパティでは機能せず、他のプロパティでも機能しない可能性があります。誰かがこれに合う機能を持っていますか?

scher

私は次の解決策に行き着きました。ネイサン・リドリー質問にヒントを見つけました

/// <summary>
/// Helper class for analyzing a type.
/// </summary>
public static class TypeAnalyzer
{
    /// <summary>
    /// Calculates if the given type is a "simple" type.
    /// </summary>
    /// <param name="type">Type to be checked for simplicity.</param>
    /// <returns>True, if the type is "simple";false otherwise.</returns>
    /// <remarks>
    ///   The following types are assumed to be simple:
    ///   <list type="*">
    ///     <item>string</item>
    ///     <item>int</item>
    ///     <item>decimal</item>
    ///     <item>float</item>
    ///     <item><see cref="StringComparison"/> (enum type)</item>
    ///     <item>int? (nullable simple types)</item> 
    ///   </list>
    ///   The following types are not simple:
    ///   <list type="*">
    ///     <item>Point (struct)</item>
    ///     <item>Point? (nullable struct)</item>
    ///     <item>StringBuilder (class)</item>
    ///   </list>
    /// </remarks>
    public static bool IsSimple(this Type type)
    {
        if (IsNullableType(type))
            return IsNestedTypeSimple(type);

        return type.IsPrimitive
          || type.IsEnum
          || type.Equals(typeof(string))
          || type.Equals(typeof(decimal))
          || type.Equals(typeof(DateTime))
          || type.Equals(typeof(Guid));
    }

    private static bool IsNestedTypeSimple(Type type)
    {
        var nestedType = Nullable.GetUnderlyingType(type);
        return IsSimple(nestedType);
    }

    private static bool IsNullableType(Type type)
    {
        return Nullable.GetUnderlyingType(type) != null;
    }
}

NUnitで記述されたテストケースは次のとおりです。

[TestFixture]
public class TypeAnalyzerTests
{
    [TestCase(typeof(string), true)]
    [TestCase(typeof(int), true)]
    [TestCase(typeof(decimal), true)]
    [TestCase(typeof(float), true)]
    [TestCase(typeof(StringComparison), true)]
    [TestCase(typeof(int?), true)]
    [TestCase(typeof(decimal?), true)]
    [TestCase(typeof(StringComparison?), true)]
    [TestCase(typeof(object), false)]
    [TestCase(typeof(Point), false)]
    [TestCase(typeof(Point?), false)]
    [TestCase(typeof(StringBuilder), false)]
    [TestCase(typeof(DateTime), true)]
    [TestCase(typeof(Guid), true)]
    [TestCase(typeof(Guid?), true)]
    public void IsSimple_WhenCalledForType_ReturnsExpectedResult(Type type, bool expectedResult)
    {
        var isSimple = TypeAnalyzer.IsSimple(type);

        Assert.That(isSimple, Is.EqualTo(expectedResult));
    }
}

最後に、質問で言及した方法を次のように変更しました。

private bool IsLinkedProperty()
{ 
    return (_propertyInfo != null) && !_propertyInfo.PropertyType.IsSimple();
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

要素タイプ「プロパティ」に対して「属性「ref」を宣言する必要があります。」

分類Dev

このメソッドを呼び出すには、「Membership.Provider」プロパティが「ExtendedMembershipProvider」のインスタンスである必要があります。

分類Dev

データの同様のプロパティに対してJSONをどのように準備する必要がありますか?

分類Dev

「this」を使用してクラスのプロパティ、メンバー、またはメソッドを呼び出す必要がありますか?

分類Dev

Reduxストアへのすべてのディスパッチ呼び出しをどのようにログに記録する必要がありますか?

分類Dev

ビューを「更新」または「更新」する必要があるときに、ViewModelの各プロパティに対してRaisePropertyChanged()を呼び出すのは悪い習慣ですか?

分類Dev

LayoutParamsオブジェクトのプロパティを変更した後、setLayoutParamsを再度呼び出す必要がありますか?

分類Dev

Struts ActionFormプロパティはどのタイプにする必要がありますか?

分類Dev

ベースインターフェイスを作成してそこから実装したい場合、次のメソッドまたはプロパティ間で呼び出しがあいまいになります

分類Dev

私のプロパティにはgetしかありませんが、呼び出すたびにその値を変更したいです

分類Dev

JavaScriptでプロパティへの呼び出しをプロキシする方法はありますか?

分類Dev

Serilogプロパティの強化ですが、実際の書き込み呼び出しを呼び出すにはまだ必要ですか?

分類Dev

成功以外の何も返さない$ http呼び出しには、どのタイプのTypescript戻り値を使用する必要がありますか?

分類Dev

onViewRecycledに対してsuperを呼び出す必要がありますか?

分類Dev

テスト容易性のインターフェースとして常に構造プロパティを定義する必要がありますか?

分類Dev

isShellCommandプロパティは実際に何をし、どのように使用する必要がありますか?

分類Dev

RETSデータフィードでプロパティのタイトルを設定するには、どの列を使用する必要がありますか?

分類Dev

自動プロパティに関数呼び出しを追加する方法はありますか?

分類Dev

Springセキュリティフィルターは認証プロバイダーを直接呼び出す必要がありますか?

分類Dev

ajax呼び出し後、ドロップダウンフィルターに基づいてツールチップ値を更新する必要があります

分類Dev

ユーザープロファイルデータをフィールドとして追加する必要がありますか、それともSymfonyの1対1エンティティとして追加する必要がありますか?

分類Dev

データベースプロパティを含むファイルをどこに配置する必要があり、どのプロパティをファイルに書き込む必要がありますか?

分類Dev

NSubstituteで呼び出されたパラメータを取得するにはどうすればよいですか?(または少なくともそれらのプロパティに対してアサートします)

分類Dev

EF Coreは、変換のあるプロパティに対するクエリでメソッドを呼び出すことができますか?

分類Dev

マップのプロパティでset関数をどのように呼び出しますか?

分類Dev

マップのプロパティでset関数をどのように呼び出しますか?

分類Dev

Objc-CからSwiftへ:呼び出し元が使用するときに特定のタイプであることを保証するプロパティをSwiftで作成するにはどうすればよいですか?

分類Dev

Delphiのブールプロパティに対してマルチスレッド保護を行う必要がありますか?

分類Dev

別のプロパティの名前を使用して、EFエンティティプロパティを列にマップする必要があります

Related 関連記事

  1. 1

    要素タイプ「プロパティ」に対して「属性「ref」を宣言する必要があります。」

  2. 2

    このメソッドを呼び出すには、「Membership.Provider」プロパティが「ExtendedMembershipProvider」のインスタンスである必要があります。

  3. 3

    データの同様のプロパティに対してJSONをどのように準備する必要がありますか?

  4. 4

    「this」を使用してクラスのプロパティ、メンバー、またはメソッドを呼び出す必要がありますか?

  5. 5

    Reduxストアへのすべてのディスパッチ呼び出しをどのようにログに記録する必要がありますか?

  6. 6

    ビューを「更新」または「更新」する必要があるときに、ViewModelの各プロパティに対してRaisePropertyChanged()を呼び出すのは悪い習慣ですか?

  7. 7

    LayoutParamsオブジェクトのプロパティを変更した後、setLayoutParamsを再度呼び出す必要がありますか?

  8. 8

    Struts ActionFormプロパティはどのタイプにする必要がありますか?

  9. 9

    ベースインターフェイスを作成してそこから実装したい場合、次のメソッドまたはプロパティ間で呼び出しがあいまいになります

  10. 10

    私のプロパティにはgetしかありませんが、呼び出すたびにその値を変更したいです

  11. 11

    JavaScriptでプロパティへの呼び出しをプロキシする方法はありますか?

  12. 12

    Serilogプロパティの強化ですが、実際の書き込み呼び出しを呼び出すにはまだ必要ですか?

  13. 13

    成功以外の何も返さない$ http呼び出しには、どのタイプのTypescript戻り値を使用する必要がありますか?

  14. 14

    onViewRecycledに対してsuperを呼び出す必要がありますか?

  15. 15

    テスト容易性のインターフェースとして常に構造プロパティを定義する必要がありますか?

  16. 16

    isShellCommandプロパティは実際に何をし、どのように使用する必要がありますか?

  17. 17

    RETSデータフィードでプロパティのタイトルを設定するには、どの列を使用する必要がありますか?

  18. 18

    自動プロパティに関数呼び出しを追加する方法はありますか?

  19. 19

    Springセキュリティフィルターは認証プロバイダーを直接呼び出す必要がありますか?

  20. 20

    ajax呼び出し後、ドロップダウンフィルターに基づいてツールチップ値を更新する必要があります

  21. 21

    ユーザープロファイルデータをフィールドとして追加する必要がありますか、それともSymfonyの1対1エンティティとして追加する必要がありますか?

  22. 22

    データベースプロパティを含むファイルをどこに配置する必要があり、どのプロパティをファイルに書き込む必要がありますか?

  23. 23

    NSubstituteで呼び出されたパラメータを取得するにはどうすればよいですか?(または少なくともそれらのプロパティに対してアサートします)

  24. 24

    EF Coreは、変換のあるプロパティに対するクエリでメソッドを呼び出すことができますか?

  25. 25

    マップのプロパティでset関数をどのように呼び出しますか?

  26. 26

    マップのプロパティでset関数をどのように呼び出しますか?

  27. 27

    Objc-CからSwiftへ:呼び出し元が使用するときに特定のタイプであることを保証するプロパティをSwiftで作成するにはどうすればよいですか?

  28. 28

    Delphiのブールプロパティに対してマルチスレッド保護を行う必要がありますか?

  29. 29

    別のプロパティの名前を使用して、EFエンティティプロパティを列にマップする必要があります

ホットタグ

アーカイブ